将任何值添加到最大整数值会产生错误的计算

时间:2017-05-04 14:49:01

标签: java integer type-conversion short

我正在添加两个号码2147483647和45

public void checkIntAdd(){

int intMax =  2147483647;
int anyNumber  = 26;

int number = intMax+anyNumber;
System.out.println("Wrong Calculation -"+number);

}

我们应该回答

  

“2147483692

“但它正在成为

  

-2147483604

我很好,它正在失去一些价值

但是当我尝试这种类型的东西时,它会产生编译错误

public void checkShortAdd(){

short intMax =  214;
short anyNumber  = 26;

short number = intMax+anyNumber;  // error is coming Type mismatch: cannot convert from int to short
System.out.println("Wrong Calculation -"+number);

}
  

//错误即将发生类型不匹配:无法从int转换为short

我无法理解它的原因。

当我向其添加演员时工作正常

short number = (short) (intMax+anyNumber);  

类似地,编译器应该给int添加错误,以便用户可以注意它会超出限制

3 个答案:

答案 0 :(得分:2)

数字1:第一个数字是Java中的最大整数大小。你可以用

来搞定
Integer.MAX_VALUE

您可以使用

 BigInteger reallyBig = new BigInteger("1234567890123456890");

2号:在Java中,它位于语言的基本编码中。简化,你可以说short + short = int,所以你必须将它转换为正确的解决方案

来源:https://www.reddit.com/r/learnprogramming/comments/3refus/in_java_why_is_the_sum_of_2_shorts_an_int/

答案 1 :(得分:0)

TL,DR ......

这是有效的short intMax = 214;因为即使你是一个int文字,它也适合于短...的范围,同样适用于short anyNumber = 26;  现在java编译器不能保证这个

short number =  intMax + anyNumber;

仍然可以适合一个短变量,所以你需要施放

short number = (short) (intMax + anyNumber);

答案 2 :(得分:0)

根据java语言规范

Java虚拟机指令集中的大多数指令都会编码有关它们执行的操作的类型信息。例如,iload指令(§iload)将局部变量的内容加载到操作数堆栈上,该变量必须是int。 fload指令(§fload)对浮点值执行相同操作。这两条指令可能具有相同的实现,但具有不同的操作码。

opcode table for java

在此表中没有短字节char的操作。

Java虚拟机实际类型与Java虚拟机计算类型之间的映射

Mapping between Java Virtual Machine actual types and Java Virtual Machine computational types

其中表示短默认类型仅为int

所以我只想深入了解我的程序,所以我只是运行一个命令

javap -verbose RunTimeS.class

和out put contains

  

iload_1

正在加载整数

Verbose output for class