System.out.println(2147483647 + 1); //prints -2147483648
我知道2147483647是整数数据类型的最大值。我的问题是为什么这个结果是为Integer类型计算的,为什么不考虑Long或double?
由于...
System.out.println(127+1); //prints 128
这里为什么127不考虑字节数据类型,导致结果为-128?
答案 0 :(得分:2)
从根本上说,你似乎并不完全理解literals。没有小数点或后缀的数字始终为int
,无论其大小如何。当分配给较大的原始数据类型时,implicit widening可能会进一步复杂化(例如,int
可能会隐式扩展为long
)。
所以现在我们知道你的两个文字是int
个。 int
+ int
始终为int
。结果是否会溢出并不重要。
如果您知道或怀疑常量超出int
的范围,请添加后缀L
(即2147483647L
和1L
)以明确声明这些是long
多头。 long
+ long
= /ZI /nologo /W3 /WX- /Od /Oy- /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_UNICODE" /D "UNICODE" /Gm /EHsc /RTC1 /GS /fp:precise /Zc:wchar_t /Zc:forScope /Yu"StdAfx.h" /Fp"Debug\test.pch" /Fa"Debug\" /Fo"Debug\" /Fd"Debug\vc100.pdb" /Gd /analyze- /errorReport:queue
,因此在这种情况下结果不会溢出。
答案 1 :(得分:1)
println重载了几个输入,你的参数是int类型所以方法将被调用
<form [formGroup]="form" id="form" (submit)="addDetails();form.reset()" class="form-style-9" ngNativeValidate>
<div class="form-group">
<div class="col-sm-4">
<label for="username">User Name</label></div>
<div class="col-sm-8"><input type="text" id="username" class="form-control"
placeholder="Please Enter User Name" formControlName="username" required="true">
</div>
<input type="hidden" id="usernameX" name="username" />
</div>
<input type="submit">
</form>
答案 2 :(得分:1)
java sorce代码中的每个数字默认为整数。如果你想要一个像long这样的其他类型,你需要用'L'(例如23409L)来扩展你的数字,或者你必须施展它。只有在从变量初始化时,编译器才能为您进行演员表。
在许多情况下,即使它们请求整数参数,您也可以为字节提供字节或短字节。但这只能起作用,因为java的转换和促销机制。
由于所有这些功能,一些程序员搞砸了他们在代码的某个点上拥有的真实数据类型。
有关更多信息,请访问oracle文档: https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html https://docs.oracle.com/javase/specs/jls/se7/html/jls-5.html