你的Java知識有多深?

來自:http://www.cnblogs.com/avenwu/archive/2012/02/24/2367304.html


前言

關於java的基礎知識,只是在大二初學時看得多些,今天看了看張孝祥老師的視頻,突然發現自己根本不瞭解Java很多東西,有些是忘了,而有些以前根本不知道,拿來分享一下,這些你曾注意嗎?(牛人就不要往下看了)

 

1.“&”和“&&”的區別分析

“&”和“&&”的區別在於,如果使用前者連接,那麼無論任何情況,“&”兩邊的表達式都會參與計算。如果使用後者連接,當“&&”的左邊爲false,則將不會計算其右邊的表達式。“|”和“||”的區別與“&”和“&&”的區別一樣。 

public class TestAnd 
{
public static void main(String[] args)
{
int x=0;
int y=3;
if(x!=0 && y==y/x)
System.out.println("y = "+y);
}
}


 
上面例子中,由於while語句的判斷條件中的第一個布爾表達式是不成立的,程序就不會判斷第二個布爾表達式的值,這就是“短路”。如果兩個表達式之間用“&”來連接,如果正好碰到上面所示的特殊情況,程序運行時就會出錯 

2.浮點數在內存中的表示

這個在計算機原理和操作系統中看見的比較多,很基礎的,例如分析0x50000000所對應的浮點數

image

 

2.“>>”和“>>>”是啥玩意

前者是位移運算的右移,這個不難,那後面的又是什麼,區別在哪裏?

任何信息在計算機中都是以二進制的形式保存的,&,|,^除了可以作爲邏輯運算符,也可以做爲位算符,它們對兩個操作數中的每一個二進制位都進行運算。 
只有參加運算的兩位都爲1,&運算的結果才爲1,否則就爲0。 
只有參加運算的兩位都爲0,|運算的結果才爲0,否則就爲1。 

image

 

 

 

只有參加運算的兩位不同,^運算的結果才爲1,否則就爲0。

我們可以對數據按二進制位進行移位操作,java的移位運算符有三種: 
<<  左移 
>>  右移 
>>> 無符號右移

public class ShiftTest 
{
  public static void main(String [] args)
  {
int x=0x80000000;
int y=0x80000000;
    x=x>>1;
    y=y>>>1;
    System.out.println(“0x80000000>>1 = ” + Integer.toHexString(x));
    System.out.println(“0x80000000>>>1 = ” + Integer.toHexString(y));
  }
}

運行結果如下: 
0x80000000>>1 = c0000000 
0x80000000>>>1 = 40000000

十六進制與二進的對比 
    0x80000000 =1000,0000, 0000, 0000, 0000, 0000, 0000, 0000 
    0xc0000000 =1100,0000, 0000, 0000, 0000, 0000, 0000, 0000 
    0x40000000 =0100,0000, 0000, 0000, 0000, 0000, 0000, 0000

3.Java中多維數組是不不是規則矩陣形式?

解釋:java 中並沒有真正的多維數組,只有數組的數組, Java中多維數組不一定是規則矩陣形式。比如下面兩個數組:

imageimage

 

下面還有兩個思考題,不難但是你能否毫不猶豫的說出答案?

思考題1:

某個培訓中心要爲新到的學員安排房間,假設共有x個學員,每個房間可以住6人,讓你用一個公式來計算他們要住的房間數? 
答案:(x+5)/6。這種算法還可用在查看留言板的分頁顯示上: 其中x是總共的留言數,6是每頁顯示的留言數,結果就是總共有多少頁。 

思考題2:

假設你要讓x的值在0至9之間循環變化,請寫出相應的程序代碼。 
答案:

int x=0; 
while(true)
{
  x = (x+1)%10;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章