【问题标题】:JAVA cannot convert from int to shortJAVA 无法从 int 转换为 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 抱歉打错了

标签: java int short


【解决方案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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-09-22
      • 2012-07-11
      • 2013-01-19
      • 1970-01-01
      • 2015-04-29
      • 1970-01-01
      • 2011-08-18
      相关资源
      最近更新 更多