Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 向最大整数值添加任何值都会给出错误的计算结果_Java_Integer_Type Conversion_Short - Fatal编程技术网

Java 向最大整数值添加任何值都会给出错误的计算结果

Java 向最大整数值添加任何值都会给出错误的计算结果,java,integer,type-conversion,short,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 我很好,它正在失去一些价值 但当我用short尝试这种类型

我加上两个号码2147483647和45

public void checkIntAdd(){

int intMax =  2147483647;
int anyNumber  = 26;

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

}
我们该怎么回答

“2147483692

“但它是作为

-2147483604

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

但当我用short尝试这种类型的东西时,它给出了编译错误

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加法错误,这样用户就可以注意它将超出限制,就像short的情况一样,数字1:第一个数字是Java中的最大整数大小。你可以拿着这个

Integer.MAX_VALUE
你可以用

 BigInteger reallyBig = new BigInteger("1234567890123456890");
第二点:在Java中,它是语言的基本编码。简化后,您可以说short+short=int,因此您必须将其转换为正确的解决方案

资料来源:TL,DR

这是有效的
short intMax=214short anyNumber=26相同
现在java编译器不能保证这一点

short number =  intMax + anyNumber;
仍然可以适应一个短变量,因此需要强制转换

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

根据java语言规范

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

在该表中,没有针对短字节字符的操作

Java虚拟机实际类型和Java虚拟机计算类型之间的映射如下

其中表示短缺省类型仅为int

所以我只想深入研究我的程序,所以我只需要运行一个命令

javap -verbose RunTimeS.class
并将其输出

iload_1

这个整数正在加载


您得到的结果不是
2147483604
。它是
-2147483604
。添加两个短字符最终可能是一个不能放入短字符中的int。我们应该回答2147483692。。。。。怎么做?在加法之前试着将短字符转换成整数。在演员表周围加上括号,以确保它首先发生。似乎编译器想在进行数学运算之前将int转换为short,但是int太大了,不能降级为short。@Jaroslaw Pawlak纠正了我可以说的关于int的相同内容,也不需要进行类型转换。在我的示例中,我只添加了两个short,并将其指定为short