JAVA无法从int转换为short

时间:2016-05-27 18:44:29

标签: java int 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.*/

我正在尝试减少指定为short的数字但是eclipse写道无法从int转换为short。我不承认为什么。 那么问题出在哪里?我该如何修复此错误?

4 个答案:

答案 0 :(得分:3)

java是32位。这意味着无论何时执行任何算术运算,它都将返回32位值。所以,你必须再次将其缩短,如下:

int a = 10;
short premennaTypuShort = (short)a;    
premennaTypuShort =(short)(premennaTypuShort - 7);

答案 1 :(得分:2)

问题在于,为了计算premennaTypuShort - 7,首先需要将premennaTypuShort转换为int,因此计算结果为int。< / p>

这反过来意味着您正在尝试将int分配回short变量,这需要您做出明确的向下转发。

答案 2 :(得分:2)

当您使用byteshortchar执行涉及ints的算术运算时,会自动升级到{int 1}}原始类型。

在此,您尝试将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

通过将1添加到Short.MAX_VALUE(32767),您可以获得短缺并获得意外结果。

答案 3 :(得分:1)

加法运算符(+和 - )是“数值整数运算符”。并且数值整数运算符总是生成int或long类型的值。 因为,除了具有至少1个long类型的操作数的移位运算符之外的任何整数运算符都是使用64位精度执行的,结果将是long类型。 否则,操作使用32位精度执行,结果将为int类型。 这就是为什么表达式premennaTypuShort – 7生成int类型的结果并将int值存储到short,您需要专门将其转换为short像跟随,这被称为缩小。

premennaTypuShort = (short)(premennaTypuShort - 7)