在java語言中,a+=b和a=a+b的主要區別是在運算的精度上。類似的有“-= 、 *= 、/= 、%= ”,這里以a+=b 與 a=a+b 舉例說明一下。
附:隱式類型轉換:
自動類型轉換,也稱隱式類型轉換,是指不需要書寫代碼,由系統自動完成的類型轉換。
轉換規則為:
從存儲范圍小的類型到存儲范圍大的類型。
具體規則為:
short(char)→int→long→float→double
也就是說int類型的變量可以自動轉換為long類型,示例代碼:
int b = 10;long l = b;
1. 下面是一串代碼,我們試一下a=a+b的形式:
public class TestDemo {
public static void main(String[] args) {
byte a=1;
a=a+4;
System.out.println(a);
}
}
從圖中可以看出出現了錯誤,根本無法運行。報錯原因我也貼出來了,說是“類型不匹配:不能從int轉換為byte”,
這里因為a是byte類型,而數字4默認是int 類型。在java中,在a+4時,會進行 自動類型轉換 ,所以a+4 會轉換成int類型。而變量a還是byte類型,將int 類型的a+4賦值給byte類型的a ,無疑會報錯。
當然,我們也可以進行強類型轉換,將已經轉換成int類型的a+4強制轉換為byte類型,這樣也是可以的。但是這種轉換可能會導致溢出或者精度的下降,如果容忍可能出現的誤差,可以使用這種轉換。
下面是轉換的結果:
public class TestDemo {
public static void main(String[] args) {
byte a=1;
a=(byte)(a+4);
System.out.println(a);
}
}
(2)下面試一試a+=b的形式
public class TestDemo {
public static void main(String[] args) {
byte a=1;
a+=4;
System.out.println(a);
}
}
我們發現結果是正確的,程序也沒毛病。大家需要明確的是“+=”是java中的一個運算符,而不是兩個,所以在運算時 會進行自動類型轉換,也就是低級變量可以直接轉換為高級變量。所以在編譯時沒有報錯。
(3),總結一下,在兩個變量的數據類型一樣時:a+=b 和a=a+b 是沒有區別的。
但是當兩個變量的數據類型不同時,就需要考慮一下數據類型自動轉換的問題了。
也就是涉及到精度了。
--------------------- 作者:kingdom_wp 來源:CSDN 原文:https://blog.csdn.net/m0_38022029/article/details/79606104?utm_source=copy 版權聲明:本文為博主原創文章,轉載請附上博文鏈接!