強(qiáng)制類(lèi)型轉(zhuǎn)換
public static void main(String[] args){ ? ? ? ?
????? short a = 2; ? ? ? ?
???? ?short b = 3; ? ? ? ?
???????short c = a+b;//這句為什么顯示的是錯(cuò)誤語(yǔ)句??? }
public static void main(String[] args){ ? ? ? ?
????? short a = 2; ? ? ? ?
???? ?short b = 3; ? ? ? ?
???????short c = a+b;//這句為什么顯示的是錯(cuò)誤語(yǔ)句??? }
2016-12-21
舉報(bào)
2017-01-02
public static void main(String[] args){ ? ? ? ?
????? short a = 2; ? ? ? ?
???? ?short b = 3; ? ? ? ?
???????short c = a+b;//此句報(bào)錯(cuò)—— 錯(cuò)誤: 不兼容的類(lèi)型: 從int轉(zhuǎn)換到short可能會(huì)有損失
?????????????????????????????/**報(bào)錯(cuò)原因:a,b雖已被賦值為short類(lèi)型(16位),但是(a+b)的計(jì)算結(jié)果并沒(méi)有被賦值為 short類(lèi)型。注意:+的優(yōu)先級(jí)高于=。所以先算出(a+b)的值為整數(shù)5(它會(huì)先被Java自動(dòng)隱式轉(zhuǎn)換為int類(lèi)型32位),此時(shí)再將5賦值給c(short類(lèi)型16位),Java就不能自動(dòng)隱式轉(zhuǎn)換了,想要轉(zhuǎn)換的話得用強(qiáng)制縮小轉(zhuǎn)換,即short c =(short)(a+b);
????*/
???????????????? }
正確的代碼如下:
public class Testis{
?public static void main(String[] args){
??short a=2;
??short b=3;
?/*
?*(a+b)的計(jì)算結(jié)果會(huì)被java自動(dòng)隱式轉(zhuǎn)換成int類(lèi)型
?*必須采用強(qiáng)制縮小轉(zhuǎn)換才能將計(jì)算結(jié)果賦值給short類(lèi)型的c
?*/
??short c=(short)(a+b);
??System.out.println(c);
?}
}
希望你可以采納我的答案哦^-^
2016-12-21
兩個(gè)short型的數(shù)相加會(huì)自動(dòng)轉(zhuǎn)成int型。精度小于int的會(huì)自動(dòng)轉(zhuǎn)化成Int
2016-12-21
不兼容的類(lèi)型:從int轉(zhuǎn)換到short可能會(huì)有損失;前面兩個(gè)存在隱式轉(zhuǎn)換;