简单的Java整数和长算术

Goo*_*ozo 0 java int long-integer

简单的代码没问题

long x =  Integer.MAX_VALUE;
System.out.println(x * 2 + "...." + Long.MAX_VALUE);

= 4294967294....9223372036854775807
Run Code Online (Sandbox Code Playgroud)

但这里发生了什么?为什么-2

System.out.println(2 * Integer.MAX_VALUE + "...." + Long.MAX_VALUE);
=   -2....9223372036854775807
Run Code Online (Sandbox Code Playgroud)

为什么元素是149998,编译器不会将这些转换为long?

    long elements = 2 * Integer.MAX_VALUE + 150000;
System.out.println(elements + "...." + Long.MAX_VALUE);
149998....9223372036854775807
Run Code Online (Sandbox Code Playgroud)

-谢谢

Pri*_*ley 6

将变量从整数提升为长.

long elements = 2 * Integer.MAX_VALUE + 150000; 
Run Code Online (Sandbox Code Playgroud)

应该

long elements = 2L * Integer.MAX_VALUE + 150000;
Run Code Online (Sandbox Code Playgroud)

对原始陈述的评价,

long elements = 2 * Integer.MAX_VALUE + 150000; 
Run Code Online (Sandbox Code Playgroud)

相当于

long elements = (long)(2 * Integer.MAX_VALUE + 150000); 
Run Code Online (Sandbox Code Playgroud)