Java基礎 小問題集合

來源:互聯網
上載者:User

標籤:預設值   自增   強制類型轉換   文字框   object   漢字   ==   相等   語言   

1,char型變數中能不能存貯一個中文漢字?為什麼?  

   char型變數是用來儲存Unicode編碼的字元的,unicode編碼字元集中包含了漢字,所以,char型變數中當然可以儲存漢字啦。不過,如果某個特殊的漢字沒有被包含在unicode編碼字元集中,

   那麼,這個char型變數中就不能儲存這個特殊漢字。補充說明:unicode編碼佔用兩個位元組,所以,char類型的變數也是佔用兩個位元組。

2,自增自減問題

int x = 4;
int y = (x++) + (++x) + (x*10); //5 + 5 + 60
自增自減操作在運算的後面,即a=a++;先運算(賦值)再自增自建
自增自建操作在運算的前面,即a=--a; 先自增自減再運算(賦值)

3,short s1 = 1; s1 = s1 + 1;有什麼錯? short s1 = 1; s1 += 1;有什麼錯?  

   對於short s1 = 1; s1 = s1 + 1; 由於s1+1運算時會自動提升運算式的類型,所以結果是int型,再賦值給short類型s1時,編譯器報告需要強制轉換類型的錯誤

   對於short s1 = 1; s1 += 1;由於 += 是java語言規定的運算子,java編譯器會對它進行特殊處理,因此可以正確編譯。

   正確的寫法為:

s = (byte) (s+1);

4,強制轉換的兩種類型

float f = 12.3f;
long g = 12345;
f = g; //隱式轉換
g = (long)f; //強制轉換

5,byte越界問題,byte b = 130 及 byte b = 300是正確的嗎

// byte b = 130;
//因為byte的範圍是:-128到127。(-2^7--2^7-1), 而130不在此範圍內,所以報錯。
// 我們可以使用強制類型轉換
byte b = (byte)(126 + 4);
System.out.println(b); //-126
byte b2 = (byte)300;
System.out.println(b2); //44

 擷取130這個資料的二進位。 00000000 00000000 00000000 10000010 這是130的原碼,也是反碼,還是補碼。
 做截取操作,截成byte類型的了。 10000010 這個結果是補碼。
已知補碼求原碼。

符號位 數值位
補碼: 1 0000010
 反碼: 1 0000001
 原碼: 1 1111110

6,保留小數的兩種方法

System.out.println(-10/3.0);
System.out.println( (float)Math.round( (-10/3.0) *1000 )/1000); //保留3為小數,Math.round
System.out.println(new DecimalFormat("0.00").format(-10/3.00)); //保留2位小數,DecimalFormat.format()

7,求值-3 % 5

System.out.println(-3 % 5);//-3

8,不引入第3個值或者變數,交換2個資料的值

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
System.out.println("x = " + x + ",y = " + y);

9,最高效的計算出2的3次方

System.out.println(2<<3);
將一個數左移n位,就相當於乘以了2的n次方,那麼,一個數乘以8隻要將其左移3位即可,而位元運算cpu直接支援的,效率最高

10,"=="和equal的區別

     ”==“ 操作符專門用來比較兩個變數的值是否相等,也就是用於比較變數所對應的記憶體中所儲存的數值是否相同,要比較兩個基本類型的資料或兩個引用變數是否相等,只能用==操作符。

     如果一個變數指向的資料是物件類型的,那麼,這時候涉及了兩塊記憶體,對象本身佔用一塊記憶體(堆記憶體),變數也佔用一塊記憶體,例如Objet obj = new Object();變數obj是一個記憶體,new Object()是另一個記憶體,此時,變數obj所對應的記憶體中儲存的數值就是對象佔用的那塊記憶體的首地址。對於指向物件類型的變數,如果要比較兩個變數是否指向同一個對象,即要看這兩個變數所對應的記憶體中的數值是否相等,這時候就需要用==操作符進行比較。

     equals方法是用於比較兩個獨立對象的內容是否相同,就好比去比較兩個人的長相是否相同,它比較的兩個對象是獨立的。例如,對於下面的代碼:

String a=new String("foo");

String b=new String("foo");

     兩條new語句建立了兩個對象,然後用a,b這兩個變數分別指向了其中一個對象,這是兩個不同的對象,它們的首地址是不同的,即a和b中儲存的數值是不相同的,所以,運算式a==b將返回false,而這兩個對象中的內容是相同的,所以,運算式a.equals(b)將返回true。記住,字串的比較基本上都是使用equals方法。

11,Integer與int的區別

    int是java提供的8種未經處理資料類型之一。Java為每個原始類型提供了封裝類,Integer是java為int提供的封裝類。

    int的預設值為0,而Integer的預設值為null,即Integer可以區分出未賦值和值為0的區別,int則無法表達出未賦值的情況,例如,要想表達出沒有參加考試和考試成績為0的區別,則只能使用Integer。

在JSP開發中,Integer的預設為null,所以用el運算式在文字框中顯示時,值為空白字串,而int預設的預設值為0, 所以用el運算式在文字框中顯示時,結果為0,int不適合作為web層的表單資料的類型。

     在Hibernate中,如果將OID定義為Integer類型,那麼Hibernate就可以根據其值是否為null而判斷一個對象是否是臨時的,如果將OID定義為了int類型,還需要在hbm對應檔中設定其unsaved-value屬性為0。

     另外,Integer提供了多個與整數相關的操作方法,例如,將一個字串轉換成整數,Integer中還定義了表示整數的最大值和最小值的常量。

 

 

Java基礎 小問題集合

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.