前言
(原標題好像有些問題,我想說的是本文不是什么實際項目中一定會應用的知識,知識基礎概念問題,)關於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。
只有參加運算的兩位不同,^運算的結果才為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中多維數組不一定是規則矩陣形式。比如下面兩個數組:
下面還有兩個思考題,不難但是你能否毫不猶豫的說出答案?
思考題1:
某個培訓中心要為新到的學員安排房間,假設共有x個學員,每個房間可以住6人,讓你用一個公式來計算他們要住的房間數?
答案:(x+5)/6。這種算法還可用在查看留言板的分頁顯示上: 其中x是總共的留言數,6是每頁顯示的留言數,結果就是總共有多少頁。
思考題2:
假設你要讓x的值在0至9之間循環變化,請寫出相應的程序代碼。
答案:
int x=0;
while(true)
{
x = (x+1)%10;
}