首页 > 代码库 > 数据类型注意事项

数据类型注意事项

为什么 byte 类型取值是 -128 ~ 127 ?

-125 -126 -127

原码: 1111 1101 1111 1110 1111 1111

反码: 1000 0010 1000 0001 1000 0000

补吗: 1000 0011 1000 0010 1000 0001

因为他们的补吗依次减了一,所以推出-128的补码为: 1000 0000 为-0,但在计算机用 -128 显示


byte b1 = 3,b2 = 4, b;

b = b1 + b2;

b = 3 + 4;

问:哪句是编译失败的呢?为什么呢?

答:b=b1+b2;这句编译失败,因为byte和byte的进行运算的时候会提升为int类型,

当int类型赋值给byte类型时候会损失精度,所以会编译失败.而b=3+4;不会编译错误,

因为Java中有常量优化机制,在编译的的时候直接把3和4的结果赋值给b.

 


byte by = 130;有没有问题?有问题如何解决?结果是多少呢?

 

答:有问题,因为 byte取值范围是-128~127,如果赋值130给by就需要进行强制转换,但会损失精度,结果为-126

 


byte b = 10;

b++;

b = b + 1;

哪句是编译失败的呢?为什么呢?

 

答:b=b+1;这句会编译失败,因为byte和int数据进行运算时候会把byte类型提升为int类型,

当int的类型数据赋值给byte类型b会损失精度,所以编译失败,如果需要赋值,需要进行强制转换.

 

 


&&和&的区别? ||与|的区别?

* 最终结果一样。

* &&具有短路效果。左边是false,右边不执行。

&是无论左边是false还是true,右边都会执行

* ||具有短路效果,左边为true,右边不执行

 


最有效率的算出2 * 8的结果

System.out.println(2 << 3);

 


请自己实现两个整数变量的交换(不用第三方变量)

 

int x = 10 ;

int y = 5;

x = x ^ y; // 10 ^ 5

y = x ^ y; // 10 ^ 5 ^ 5 y = 10

x = x ^ y; // 10 ^ 5 ^ 10 x = 5


写出程序结果

public static void main(String[] args) {

Integer i1 = new Integer(97);

Integer i2 = new Integer(97);

System.out.println(i1 == i2);

System.out.println(i1.equals(i2));

System.out.println("-----------");

 

Integer i3 = new Integer(197);

Integer i4 = new Integer(197);

System.out.println(i3 == i4);

System.out.println(i3.equals(i4));

System.out.println("-----------");

 

Integer i5 = 97;

Integer i6 = 97;

System.out.println(i5 == i6);

System.out.println(i5.equals(i6));

System.out.println("-----------");

 

Integer i7 = 197;

Integer i8 = 197;

System.out.println(i7 == i8);

System.out.println(i7.equals(i8));

}

 

 

结果为:

false
true
-----------
false
true
-----------
true
true
-----------
false
true

数据类型注意事项