为什么 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