JAVA 无法从 int 转换为 short
Posted
技术标签:
【中文标题】JAVA 无法从 int 转换为 short【英文标题】:JAVA cannot convert from int to short 【发布时间】:2016-05-27 18:44:28 【问题描述】:您好,我是新来的,这是我的第一个问题: 我有一个带有简单算术运算符的代码。 但它不起作用:
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。我不明白为什么。 那么问题出在哪里?如何修复此错误?
【问题讨论】:
每当处理 short 和 int 算术运算时,java 在int
中返回结果,因此您必须将其类型转换为 int
premennaTypuShort -= 7;
将其转换为short
而不是int
抱歉打错了
***.com/questions/2294934/…
【参考方案1】:
java 是 32 位的。这意味着无论何时执行任何算术运算,它都会返回 32 位值。因此,您必须再次将其转换为short,如下所示:
int a = 10;
short premennaTypuShort = (short)a;
premennaTypuShort =(short)(premennaTypuShort - 7);
【讨论】:
aha ... :) 第二部分 premennaTypuShort =(short)(premennaTypuShort - 7);我不知道另一个(短)是必要的......为什么另一个?它在第一行被定义为short。不是吗? 亲爱的,当结果以整数形式出现时,它需要简单地转换,否则精度损失 不知道你为什么在回答中提到 unicode。 unicode 意味着 java 通过定义 unicode 来处理世界上所有可用的字符,以便在 java 中整数是 4 位,但在 C、C++ 中是 2 位【参考方案2】:问题是为了计算premennaTypuShort - 7
,首先需要将premennaTypuShort
转换成int
,所以计算的结果是int
。
这反过来意味着您试图将 int
分配回 short
变量,这需要您进行明确的向下转换。
【讨论】:
感谢您的快速回复。 - 是的,我正在尝试用简短的类型来做这个算法。不是整数。因为我也想要短类型的结果。如何进行这种显式的向下转换? 通常你会通过向下转换7
来做到这一点,就像这样:premennaTypuShort - (short)7
。但是 afaik,Java 从来没有执行过short
算术。它总是将short
s 向上转换为int
来执行算术运算。因此,您必须满足于使用 int
算术完成的计算,然后您必须将结果显式向下转换为 short
。
ahaa.. 我现在明白了.. 任何类型的算术都是以整数形式完成的,因此如果我想将结果缩短,我需要输入这个 premennaTypuShort =(short)(premennaTypuShort - 7);
嗯,它也可以做long
算术,所以它不是只能做int
算术。但它不会小于int
,是的。【参考方案3】:
当您使用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
通过将1
添加到 Short.MAX_VALUE (32767
) 中,您会溢出 short 并且会得到意想不到的结果。
【讨论】:
【参考方案4】:加法运算符(+ 和 -)是“数值整数运算符”。并且数值整数运算符总是产生一个 int 或 long 类型的值。
因为,除移位运算符之外的任何整数运算符都使用 64 位精度执行至少 1 个 long 类型的操作数,结果将是 long 类型。
否则使用 32 位精度执行操作,结果将是 int 类型。
这就是为什么这里的表达式premennaTypuShort – 7
产生int
类型的结果,并且要将int
值存储到short
,您需要专门将其转换为short
,如下所示,这被称为缩小。
premennaTypuShort = (short)(premennaTypuShort - 7)
【讨论】:
以上是关于JAVA 无法从 int 转换为 short的主要内容,如果未能解决你的问题,请参考以下文章