java表达式陷阱
以下是一些常見的面試java問題的表達,我將造成直接的形式附加目光。
問題1: int a = 10;int b = a + (a = 5) + a + (a = 10);System.out.println(b);//b = 30
問題2:
int i = 1;i = (i=i+(i+(i=2)+i)+i)+3;System.out.println(i);//i = 11
問題3:
int a = 1;int b = 2;System.out.println((a = 3) + (b = 4) + a*b);//19
問題4:
System.out.println(-11 % -7);//-4 注:模運算中,第一個操作數提供結果值的符號。第一個和第二個操作數的絕對值取模后作為結果值的絕對值問題5: int i = 1;System.out.println(i+++i+++i+++i++);//10 注:1+2+3+4 = 10問題6: int i = 1;System.out.println(i++ + ++i+i++ + ++i);//12 注:1+3+3+5 = 12問題7: int i = 1;int j = i+++(i=1)+i+++(i=1)+i++;System.out.println(j);//j = 5 注:j = 1+1+1+1+1 問題8: int a = 10;int b = 10;double c = 10.0;System.out.println(a == b);//trueSystem.out.println(a == c);//true問題9: System.out.println(3.0*10 == 30.0);//trueSystem.out.println(3.141*10 == 31.41);//trueSystem.out.println(3.14*10 == 31.4);//false 注:3.14*10 = 31.400000000000002System.out.println(3.1415*10 == 31.415);//false 注:3.1415*10 = 31.415000000000003問題10: java會將范圍在-128~+127(byte的范圍)的數放在一個靜態數組中緩存,所以僅僅要在此范圍內的裝箱指向的都是這個數組中的對象,而在此范圍外的則需newInteger a = 128;Integer b = 128;Integer c = 127;Integer d = 127;System.out.println(a == b);//falseSystem.out.println(c == d);//true問題11: byte a = 1; // byte a = 128//報錯。注意byte的范圍為-128~127byte b = 1;a = (byte) (a+1);b++;System.out.println(a==b);//true問題12: System.out.println(true | false & false);//true 注:與運算比或運算優先級高問題13: int a = 10;//0000 0000 0000 0000 0000 0000 0000 1010System.out.println(a<<1);//10*2=20System.out.println(a<<2);//10*2^2=10*4=40System.out.println(a<<32);//10 左移32位(int的大小)之后。回歸原來的值System.out.println(a<<32L);//10 不會轉型。右側操作數只提供左移位數long b = 10L;System.out.println(b<<1);//20System.out.println(b<<2);//40System.out.println(b<<64);//10 long為8字節,64位。所以須要左移64位才干循環一圈回到原點System.out.println(b<<64L);//10byte c = 1;System.out.println(c<<1);//2System.out.println(c<<2);//4System.out.println(c<<8);//256 這里須要注意。c為byte類型,移位操作的操作數最小要求是int類型。byte會轉為intSystem.out.println(c<<32);//1 能夠把c當成int型
問題14: int a = 10;a = a<<10;a = a<<22;int b = 10;b = b<<32;System.out.println(a);//0 注:第一步左移10位,第二步移動的a并不是原始的a,而是a左移10位之后的a,這次左移22位之后把非零位移到邊界之外了,補零之后值變為0System.out.println(b);//10 回歸原始的10問題15: int a = 10;double b = 9.5;System.out.println(a>b ? a : b);//10.0 結果會轉成double型System.out.println(a>b ? 1 : false); //2 盡管boolean不能轉成int,可是自己主動裝箱之后能夠轉成object問題16: int a = 1;a+=a+=a++;System.out.println(a);//3問題17: int a = 1;a += 3L;//不報錯 // a = a+3L;//報錯,高類型轉低類型System.out.println(a);int b = 1;b += 3.5; //復雜的算術表達式,自己主動型高意愿變低型System.out.println(b);//結果4代替4.5
問題1: int a = 10;int b = a + (a = 5) + a + (a = 10);System.out.println(b);//b = 30
問題2:
int i = 1;i = (i=i+(i+(i=2)+i)+i)+3;System.out.println(i);//i = 11
問題3:
int a = 1;int b = 2;System.out.println((a = 3) + (b = 4) + a*b);//19
問題4:
System.out.println(-11 % -7);//-4 注:模運算中,第一個操作數提供結果值的符號。第一個和第二個操作數的絕對值取模后作為結果值的絕對值問題5: int i = 1;System.out.println(i+++i+++i+++i++);//10 注:1+2+3+4 = 10問題6: int i = 1;System.out.println(i++ + ++i+i++ + ++i);//12 注:1+3+3+5 = 12問題7: int i = 1;int j = i+++(i=1)+i+++(i=1)+i++;System.out.println(j);//j = 5 注:j = 1+1+1+1+1 問題8: int a = 10;int b = 10;double c = 10.0;System.out.println(a == b);//trueSystem.out.println(a == c);//true問題9: System.out.println(3.0*10 == 30.0);//trueSystem.out.println(3.141*10 == 31.41);//trueSystem.out.println(3.14*10 == 31.4);//false 注:3.14*10 = 31.400000000000002System.out.println(3.1415*10 == 31.415);//false 注:3.1415*10 = 31.415000000000003問題10: java會將范圍在-128~+127(byte的范圍)的數放在一個靜態數組中緩存,所以僅僅要在此范圍內的裝箱指向的都是這個數組中的對象,而在此范圍外的則需newInteger a = 128;Integer b = 128;Integer c = 127;Integer d = 127;System.out.println(a == b);//falseSystem.out.println(c == d);//true問題11: byte a = 1; // byte a = 128//報錯。注意byte的范圍為-128~127byte b = 1;a = (byte) (a+1);b++;System.out.println(a==b);//true問題12: System.out.println(true | false & false);//true 注:與運算比或運算優先級高問題13: int a = 10;//0000 0000 0000 0000 0000 0000 0000 1010System.out.println(a<<1);//10*2=20System.out.println(a<<2);//10*2^2=10*4=40System.out.println(a<<32);//10 左移32位(int的大小)之后。回歸原來的值System.out.println(a<<32L);//10 不會轉型。右側操作數只提供左移位數long b = 10L;System.out.println(b<<1);//20System.out.println(b<<2);//40System.out.println(b<<64);//10 long為8字節,64位。所以須要左移64位才干循環一圈回到原點System.out.println(b<<64L);//10byte c = 1;System.out.println(c<<1);//2System.out.println(c<<2);//4System.out.println(c<<8);//256 這里須要注意。c為byte類型,移位操作的操作數最小要求是int類型。byte會轉為intSystem.out.println(c<<32);//1 能夠把c當成int型
問題14: int a = 10;a = a<<10;a = a<<22;int b = 10;b = b<<32;System.out.println(a);//0 注:第一步左移10位,第二步移動的a并不是原始的a,而是a左移10位之后的a,這次左移22位之后把非零位移到邊界之外了,補零之后值變為0System.out.println(b);//10 回歸原始的10問題15: int a = 10;double b = 9.5;System.out.println(a>b ? a : b);//10.0 結果會轉成double型System.out.println(a>b ? 1 : false); //2 盡管boolean不能轉成int,可是自己主動裝箱之后能夠轉成object問題16: int a = 1;a+=a+=a++;System.out.println(a);//3問題17: int a = 1;a += 3L;//不報錯 // a = a+3L;//報錯,高類型轉低類型System.out.println(a);int b = 1;b += 3.5; //復雜的算術表達式,自己主動型高意愿變低型System.out.println(b);//結果4代替4.5
總結
- 上一篇: Spring Web Flow实例教程
- 下一篇: V 5 RHCS