2個byte類型數據相加(轉型問題的分析)


轉自https://blog.csdn.net/alinshen/article/details/53571857

今天看到網上有網友問到關於final修飾的面試題目,題目如下:

[java] view plain copy
  1. <span style="font-family:SimSun;"><span style="font-size:14px;">byte b1=1,b2=2,b3,b6,b8;  
  2. final byte b4=4,b5=6,b7;  
  3. b3=(b1+b2);  /*語句1*/  
  4. b6=b4+b5;    /*語句2*/  
  5. b8=(b1+b4);  /*語句3*/  
  6. b7=(b2+b5);  /*語句4*/  
  7. System.out.println(b3+b6);</span></span>  


問題是:上面哪條語句運算會出錯呢?

其實,這個題目主要考察的就是基本數據類型轉換的問題,主要涉及到以下幾個知識點:

1、所有的byte,short,char型的值將被提升為int型;
2、如果有一個操作數是long型,計算結果是long型;
3、如果有一個操作數是float型,計算結果是float型;
4、如果有一個操作數是double型,計算結果是double型;
5、final修飾的變量不會自動改變類型,當2個final修飾相操作時,結果會根據左邊變量的類型而轉化。

 

最需要注意的是第五點,被final修飾的,這句話看似簡單,但其實包含的有2種情況:

1.被final修飾的為byte,short,char,int中的任何一種,則運算之后,得到的類型可以是byte、short、char、int、long、float、double中的任何一種都不會出錯;(前提是計算結果不能超出左邊的取值范圍,比如兩個a都是char但是相加結果是194,超出了byte范圍,所以結果不能是byte)

2.如果運算中有被final long 或者 final float 或者 final double修飾,則結果必須為同級別或者高一級別,eg:

 

[java] view plain copy
  1. <span style="font-size:14px;">  final byte a1=1,b1=1,c1=1,b11;  
  2.         final char a2='a',b2='a',c2='a',b22;  
  3.         final short a3=3,b3=3,c3=3,b33;  
  4.         final int a4=4,b4=4,c4=4,b44;  
  5.         final long a5=5,b5=5,c5=5,b55;  
  6.         final float a6=6,b6=6,c6=6,b66;  
  7.         final double a7=7,b7=7,a8=8,b77;  
  8.           
  9.         //等號右邊,被final修飾的為byte,short,char,int中的任何一種;等號左邊可以為byte、short、char、int、long、float、double中的任何一種都不會出錯  
  10.         b11=a1+a2;  
  11.         b11=a2+a3;  
  12.         b22=a2+a3;  
  13.         b33=a4+a3;  
  14.         b44=a2+a3;  
  15.         b55=a2+a3;  
  16.         b66=a2+a3;  
  17.         b77=a2+a3;  
  18.           
  19.         //等號右邊,被final修飾的為long、float、double中的任何一種;等號左邊類型必須等於或者高於等號右邊類型才不會出錯,否則出錯。   
  20.         b11=a4+a5;   //編譯時出錯  
  21.         b22=a5+a5;   //編譯時出錯  
  22.         b33=a5+a5;   //編譯時出錯  
  23.         b44=a5+a5;   //編譯時出錯  
  24.         b55=a6+a6;   //編譯時出錯  
  25.         b66=a5+a6;  
  26.         b77=a7+a2;</span>  

 

有不正確的地方希望大家留言指出來。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM