簡體   English   中英

Java(隱式類型轉換):一元運算符會影響操作中變量的數據類型嗎?

[英]Java (Implicit type casting): Does a unary operator affect the data type of the variables in operation?

在學習隱式和顯式類型轉換時,我嘗試了以下代碼:

class Implicit
{
    public static void main(String args[])
    {
        byte a=10;
        byte b=20;

        a=a+b; //

        System.out.println(a);
    }
}

編譯器報告:

在此處輸入圖片說明

我嘗試使用此代碼來查看此類示例中的一元運算符或任何其他操作是否會導致右側的數據類型發生更改。

這是這里發生的事嗎? 如果是這樣,原因是什么? 還有什么其他情況會導致數據類型被更改?

編譯器會警告您,因為byte+byte = int因此,它會警告您何時嘗試添加兩個字節(加法后基本上是一個int)並將其分配給一個字節,這將導致精度損失,因為byte只能容納8位int可以容納32位。

但是,當您使用復合賦值運算符時,這不會給您警告。

    a+=b; //

它警告您

可能會損失精度

因為加法運算符使每個byte值在加法完成之前被提升為一個int (二進制數值提升)。 所以字節+字節將是一個int結果和分配回一個字節a它需要向下轉換intbyte 如果加法的值大於可以存儲為byte值的值,則向下轉換可能會導致精度損失。

您可以通過顯式向下轉換為a=(byte)(a+b)來強制編譯器接受此操作,其中您知道風險的信號而編譯器無需理會。

add操作使byte變量提升為int。

查看此問題的答案Java類型轉換添加字節

我不太清楚為什么要使用Java,但是對於c#來說(是的,c#的結果相似),這是出於性能考慮。 詳細信息請參見此處字節+字節=整數...為什么?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM