黑马程序员技术交流社区
标题:
day02JAVA笔记下
[打印本页]
作者:
仙兒哥
时间:
2013-4-10 02:12
标题:
day02JAVA笔记下
5.1 算术运算符 +, -, *, /, %, ++, --
做运算时要遵循下面三个规则
1.当两个变量做运算,结果的类型一样,那么结果与其类型一样
2.当两个变量做运算,结构的类型不一样,其结果取精度高的类型
3.如果byte short char 三种数据类型做运算,会先将自己转成int再参与运算
4. 当char类型做运算时是将其对应的码值取出做运算
加号:在操作数字,字符,字符串时是不同的,两个字符想加得到的是码表值,两个字符串相加是将字符串链接在一起
除号:整数在使用除号操作时,得到的结果仍为整数(小数部分忽略)
取模:模数(%右边的数)的符号忽略不计,结果的正负取决于被模数(%左边的数)
自增:符号在前就先运算后取值,符号在后则是先取值后运算
%运算
左边小于右边,结果等于左边 例4%5=4
左边等于右边,结果等于0 例5%5=0
有负数参与运算结果只参考左边 例-4%5=-4
如果出现负数,那么结果只与左边数的正负有关 ,做运算时通过绝对值操作
++在前,++在后的区别
前缀++a:先做自减(加),在参与运算
后缀a++:先赋值做运算,在自加(减):
举例
int a = 3,b;
a++,++a //如果a++或++a单独存在不参与其他运算相当a+1 ,a输出结果 4
b= a++ //a在前面a先出去运算把值赋予b, 然后a再自增 a,b输出结果4,3
b= ++a //如果++在前就先算1+a=4 再赋值给b a,b输出结果4,4
操作符合目(元)的概念
a+b 我们将+叫二目(元)运算符
++与其--是一元运算符
字符数据运算的特点
连接符( + )
“字符串”和任何数据 + 就是相连接 连接完拼成新的字符串 (特殊情况‘字符”和数字 + 结果等于数字,因为有编码表的存在)
打印相应数字在unicode中对应的字符方法System.out.println((char)(121));
打印一个中文对应本机码表中的数字方法char a='我'; System.out.println((int)a);
System.out.println(“5+5=”+5+5) //输出结果为5+5=55; 其中有2次运算 先运算”5+5=5”再运算”5+5=55”
System.out.println(“5+5=”+(5+5)) //输出结果为5+5=10 后面的(5+5)增加了括号增加了优先级
int a = 3,b;
b= a++ //相打印a=4,b=3 System.out.println(a+”,”+b)结果只是4,3 只要在加字符串即可(“a=”+a+’,’+”b=”+b)
System.out.println(“a=”+a+”,”+”b=”+b) //如果(a+”,”+b)错些为(a+’,’+b)结果出错 ‘.’字符型不能加int型
举例
System.out.println(‘a’+1) //’a’是字符型 1是int型,类型不一致不能运算
//Unicode中任何一个字符都占2个八位2个字节,1是int型占4个八位, ‘a’就自动类型提升了变成数字97
5.2 赋值运算符 =, +=, -=, *=, /=, %=
赋值运算符
= //右边赋给左边
+= //把左右两边的和赋给左边
-= //把左右两边的差赋给左边
*= //把左右两边的积赋给左边
/= //把左右两边的商赋给左边
%= //把左右两边的模赋给左边
赋值运算规则
运算规则是从右到左,优先级是最低的
使用这些简化运算符不需要考虑类型转换问题,内部完成了一个强制转换的操作
举例
x=3;
x+=5;可理解成把”+=”(看成一个符号)两边的和赋给左边
笔试题
short s=1;
s=s+1;是否正确 //错误s+1得到的结果是int类型,不能在赋值给s因为s是short类型
如果写成s+=1;是否正确 //正确s+=1; s+=1;在内部的完成了一个强制转换的操作,相当于s=(short)(s+1);
笔试题
不利用第三个变量,用一行代码交换2个变量的值
作者:
仙兒哥
时间:
2013-4-10 02:12
5.3 比较运算符 ==, !=, <, >, <=, >=, instanceof
比较运算符规则 //所有比较运算符看成一个整体就对了 跟纸上写法不同而已
1. 比较运算符操作得到的结果是boolean类型结果,要么true要么false
举例
System.out.println(3==4);//就是在计算3相等于4否,结果不是ture就是false
2.> < >= <= 它们只能操作数
3.== != 不仅可以操作数,也可以操作其它类型数据
==,=注意
代码中要做相等比较时用==,不要使用=,单等代表赋值
instanceof
检车一个对象是否是某一个类的实例
5.4 逻辑运算符 &, |, ^, !, &&, ||
逻辑运算概念
其实就是关系运算,逻辑运算符2边连接的肯定是布尔型表达式,运算完要么真要么假的表达式
逻辑运算不是比较运算 而是另多个表达式建立联系的符号
判断条件用的,最终目的是看多个条件相比结果是真是假
& 与(并且) 两边的布尔型表达式的结果,两边全true结果为true,否则为false
true&true=true //老师叫小强小明过来,都来了老师才爽,有一个没来就不爽
true&false=false
false&true=false
false&false=false
举例
x=4;
x>3&x<6; //Java中不能出现6>x>3,为了把2个表达式建立联系就用到了逻辑运算符
| 或(要么) 两边的布尔型表达式的结果,两边全false结果为false,否则为true
true|true=true //小强小明,两人来了
true|false=true //或者其中一个来
false|true=true //或者其中一个来
false|false=false //一个也没来不行
举例
x=4
3<=x | x>=6; //x要么小于等于3 要么大于等于6
! 非 两边的布尔型表达式的结果,取反,判断事物的另一面,非真即假,非假即真
!true=false
!false=true
^ 异或 两边的布尔型表达式的结果,两边相同就为false 两边不同就为true
true^true=false //两边变相同不高兴了false
true^false=true //两边不同才高兴true
false^true=true
false^false=false
&& 短路与 两边的布尔型表达式的结果,左边为真,右边运算(因为左边为真右边结果会影响总结果),左边为假右边无论真假都不运算(短路)
int x=7;
x>3 && x<6;
System.out.println(x);
|| 短路或 两边的布尔型表达式的结果,当左边为真,右边不运算(因为或运算有一个为真即可,左边为真右边真假都不影响总结果)
笔试题单与&&双与&&,单或|双或||的区别
&,&& 单与和双与的区别
单与&,在计算机中将整个式子全运算完后得到结果
双与&&,左边为真,右边运算, (因为左边为真右边结果会影响总结果)左边为假右边无论真假都不运算(短路)
|,|| 单或和双或的区别
单或|,在计算机中将整个式子全运算完后得到结果
双或||,当左边为真,右边不运算(因为或运算有一个为真即可,左边为真右边真假都不影响总结果)
举例
System.out.println("短路效果");
int a=10;
int b=5;
boolean flag=(a>b)&&(a++>5); //通过a>b 可以确定整个式子的结果
System.out.println(flag);
System.out.println(a); //a的值不改变,有&&右边短路,提高效率
int a=10;
int b=5;
boolean flag=(a>b)&(a++>5); //通过a>b 可以确定整个式子的结果,但是后面式子也会运算
System.out.println(flag);
System.out.println(a); //a的值改变,计算机要把两边运算完再比较结果,效率低
所以开发中用&& ||比较多, 短路与短路或提高了效率,因为右边可以根据情况不做运算
与或优先级
&&优先级高
System.out.println(false && true || true);
System.out.println(true || true && false);
5.5 移位运算符<<, >>, >>>
关于位运算符 //使用位运算符在内存中运算速度比较快
操作二进制数的, 0代表false假,1代表true真,非0为真,与逻辑运算符规则一致,
位运算符好处
对二进制数进行操作的运算符 这样的方法在内存中运算速度比较快,效率高 开发用不多,但面试多
位运算符怎么用?
什么时候用?
<< 左移
左移就是该数乘以2的次幂的过程(移几次就是几次幂) 左边舍弃,右边用0补 举例3 << 2 = 12 --> 3*2*2=12
举例
int x=5;
x=x<<3; //5乘2的3次幂=40
>> 右移
右移就是该数除以2的几次幂的过程(移几次就是几次幂) 右边舍弃,左边为0用0补,为1用1补 举例3 >> 1 = 1 --> 3/2=1
举例
int x=6;
x=x>>1 //二进制位最高位空什么,空位就补什么
>>> 无符号右移
相当于除以2操作 右边舍弃,左边高位永远用0补 常用于取二进制中的数据 举例3 >>> 1 = 1 --> 3/2=1
举例
int x=6;
x=x>>>1 //右移出的空位无论最高位是什么右移出的空位都补0怎么移动都是正数
5.6 位运算符 &, |, ^, ~
& 与运算
如果有一个为0 结果为0,好处可以对二进制数中的1进行获取 因为其中有0结果就不可能为1了 举例6 & 3 = 2
| 或运算
如果有一个为1 结果为1,一般对某些数据进行加密解密,或者右移左移的时候对调整这个位运算数据结果的时候用,举例6 | 3 = 7
^ 异或运算
相同为0 不同为1,一个数异或同一个数2次结果还是该数本身,用途加密,异或数是几其他人不知道,该数放U盘中就是U盾
~ 反码
把这个数的二进制数1变0 0变1,,举例~6 = -7
5.7 三元运算符 ? :
三元运算符概念
三个元素参与运算的符号
三元运算符格格式
结果 = (条件表达式) ? (表达式1) : (表达式2) ;
如果条件为真,运算冒号后的结果是表达式1;将结果赋给等号左边
如果条件为假,运算冒号后的结果是表达式2; 将结果赋给等号左边
举例
获取两个数中大数
int x=3,y=4,z;
z = (x>y)?x:y; //z变量存储的就是两个数的大数
public int finalMax(int a,int b,int c)
{
int max =a >b?a:b;
}
附
码表问题
(ASCII,gb2312,GBK,GB18030,unicode)
任何国家码表一般都兼容ASCII码表
Java中定义’字符’用的就是unicode码表 Unicode中任何一个字符都占2个八位
Java中定义“字符串”用的是本机默认的码表
作者:
穆爱明
时间:
2013-7-9 09:07
学习一下,感谢分享!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2