[英]JAVA cannot convert from int to short
嗨,我是新來的,這是我的第一個問題:我有一個簡單的aritmetic運算符的代碼。 但它不會起作用:
int a = 10;
short premennaTypuShort = (short)a; /*retyped variable a into short type and entered into new variable*/
premennaTypuShort = premennaTypuShort - 7;
/*now i am trying to decrease the number but eclipse wrote that cannot convert from int to short.*/
我試圖減少指定為短的數字但是eclipse寫道無法從int轉換為short。 我不承認為什么。 那么問題出在哪里? 我該如何修復此錯誤?
java是32位。 這意味着無論何時執行任何算術運算,它都將返回32位值。 所以,你必須再次將它再次縮短,如下:
int a = 10;
short premennaTypuShort = (short)a;
premennaTypuShort =(short)(premennaTypuShort - 7);
問題是,為了計算premennaTypuShort - 7
,首先需要將premennaTypuShort
轉換為int
,因此計算結果為int
。
反過來,這意味着您正在嘗試將一個int
分配給一個short
變量,這需要您自己進行明確的向下轉換。
當您使用byte
, short
或char
來執行涉及ints
算術運算時,會自動升級到int
基元類型。
在這里,您嘗試將int
分配給short
。
解決方案是賦值運算符-=
,這將避免轉換為int
int a = 10;
short premennaTypuShort = (short)a;
premennaTypuShort-=7;
System.out.println(premennaTypuShort); // 3
賦值運算符也有不好的一面。 請查看以下代碼。
short s = Short.MAX_VALUE;
s+=1;
System.out.println(s); // -32768
通過向Short.MAX_VALUE( 32767
)添加1
,您將填滿空頭並獲得意外結果。
加法運算符(+和 - )是“數值整數運算符”。 並且數值整數運算符總是生成int或long類型的值。 因為,除了具有至少1個long類型的操作數的移位運算符之外的任何整數運算符都是使用64位精度執行的,結果將是long類型。 否則,操作使用32位精度執行,結果將為int類型。 這就是為什么這里表達式premennaTypuShort – 7
產生int
類型的結果並將int
值存儲到short
你需要專門將它premennaTypuShort – 7
為short
,如下所示,這稱為narrowing。
premennaTypuShort = (short)(premennaTypuShort - 7)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.