簡體   English   中英

JAVA無法從int轉換為short

[英]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變量,這需要您自己進行明確的向下轉換。

當您使用byteshortchar來執行涉及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 – 7short ,如下所示,這稱為narrowing。

premennaTypuShort = (short)(premennaTypuShort - 7)

暫無
暫無

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

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