你的Java知識有多深? – JAVA編程語言程序開發技術文章

前言
關於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所對應的浮點數


 
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;
}
 
 
作者:小文字
  

發佈留言