System.out.print()中打印的常量的默认数据类型;

时间:2018-06-07 09:11:39

标签: java

System.out.println(2147483647 + 1); //prints -2147483648

我知道2147483647是整数数据类型的最大值。我的问题是为什么这个结果是为Integer类型计算的,为什么不考虑Long或double?

由于...

System.out.println(127+1);  //prints 128

这里为什么127不考虑字节数据类型,导致结果为-128?

3 个答案:

答案 0 :(得分:2)

从根本上说,你似乎并不完全理解literals。没有小数点或后缀的数字始终为int,无论其大小如何。当分配给较大的原始数据类型时,implicit widening可能会进一步复杂化(例如,int可能会隐式扩展为long)。

所以现在我们知道你的两个文字是int个。 int + int始终为int。结果是否会溢出并不重要。

如果您知道或怀疑常量超出int的范围,请添加后缀L(即2147483647L1L)以明确声明这些是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