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 算术。它总是将shorts 向上转换为int 来执行算术运算。因此,您必须满足于使用 int 算术完成的计算,然后您必须将结果显式向下转换为 short ahaa.. 我现在明白了.. 任何类型的算术都是以整数形式完成的,因此如果我想将结果缩短,我需要输入这个 premennaTypuShort =(short)(premennaTypuShort - 7); 嗯,它也可以做long算术,所以它不是只能做int算术。但它不会小于int,是的。【参考方案3】:

当您使用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

通过将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的主要内容,如果未能解决你的问题,请参考以下文章

如何将string类型转换成short

关于java中的short和int类型转换的问题

短+短!=短? [复制]

计算JAVA中短类型数组的平均值

从int到short的可能有损转换[重复]

Java使用括号转换为Integer的Short