Java 语法踩坑集合
类型转换
变量相加,首先提升类型,再做操作。
常量相加,它先做操作,然后判断结果是否在左边的范围内容,如果在就不报错。如果不在,报错。
1 public static void main(String[] args) { 2 // TODO Auto-generated method stub 3 byte b1=3,b2=4,b; 4 // b = b1+b2; // 右边类型自动提升 5 b = (byte)(b1+b2); // 显示类型转换 6 b = 3+4; 7 }
(1)计算机中数据的存储和运算都是采用补码进行的。
(2)数据的有符号表示法
用0表示正号,1表示负号。
A:原码
正数:正常的二进制
负数:符号为为1的二进制
B:反码
正数:和原码相同
负数:和原码的区别是,符号位不变,数值位取反。1变0,0变1
C:补码
正数:和原码相同
负数:反码+1
(3)补充:float浮点数在计算机中的表示
符号位 指数位 底数位
S E M
1 public static void main(String[] args) { 2 // byte b = 130; 3 4 // 解决方案 5 // 方案1 6 // int a = 130; 7 8 // 方案2 9 byte b = (byte) 130; 10 System.out.println(b); // -126 11 } 12 /* 13 十进制:130 14 A:第一步,先把十进制转换为二进制 15 二进制:00000000 00000000 00000000 10000010 16 由于此二进制是一个正数,所以,补码也是00000000 00000000 00000000 10000010。 17 B:做强制类型转换 18 二进制:00000000 00000000 00000000 10000010 19 截取后就变成了:10000010 20 C:操作后的数据是补码,你看到的是原码 21 符号位 数值位 22 补码: 1 00000010 23 反码: 1 00000001 24 原码: 1 11111110 25 */
算术运算符
1 // %的最终结果和第一个数据的符号相关。 2 // 用%,如果余数为0,说明整除。 3 System.out.println(5%3); //2 4 System.out.println(5%-3);//2 5 System.out.println(-5%3);//-2 6 System.out.println(-5%3);//-2
++,--:自增自减运算符。
A:单独使用
放在操作数据的前后,效果一样。
B:参与操作使用
放在操作数前面,先自增或者自减,然后再参与运算
放在操作数后面,先参与运算,然后再自增或者自减
1 int a = 10; 2 int b = a++; 3 System.out.println(a);//11 4 System.out.println(b);//10 5 System.out.println("------------"); 6 7 int c = 10; 8 int d = ++c; 9 System.out.println(c);//11 10 System.out.println(d);//11 11 12 System.out.println("------------"); 13 int e = 10; 14 //e++; 15 ++e; 16 System.out.println(e); //11 17 18 int i = 1; 19 System.out.println(i++ + ++i + i++ + ++i);//1+3+3+5
赋值运算符
1 // short s = 1; 2 // s = s + 1; 3 // 有问题,可能损失精度 4 5 short s = 1; 6 s += 1; //s = s + 1; 7 // 这个是没有问题的。 8 // 因为这个式子等价于: 9 // s = (s的数据类型)(s + 1);
关系运算符与逻辑运算符
&&和&的区别? 前者为关系运算符,有短路效果,只要左边是false,右边不执行。而后者为逻辑运算符,全部执行。
||和|的区别? 前者为关系运算符,有短路效果,只要左边是true,右边不执行。而后者为逻辑运算符,全部执行。