当前位置: 首页 > 面试题库 >

Java中是否有数字的默认类型

田博远
2023-03-14
问题内容

如果我写这样的话

System.out.println(18);

哪种类型带有“ 18”?是 int 还是 byte ?还是还没有类型?

它不能是int,因为这样是正确的:

byte b = 3;

这是不正确的:

int i = 3;
byte bb = i; //error!

编辑:我想我在工作分配转换的规范中找到了正确的部分:

常量的编译时缩小意味着代码如下:

字节theAnswer = 42;

被允许。如果不进行缩小,则整数文字42具有int类型的事实意味着将需要强制转换为字节:

字节theAnswer =(字节)42; //允许但不要求强制转换


问题答案:

这个

18

被称为整数文字。有各种各样的文字,浮点数String,,字符等。

在下面的,

byte b = 3;

文字3是整数文字。这也是一个常量表达式。并且由于Java可以告诉它3适合byte,因此它可以安全地应用缩小的原始转换并将结果存储在byte变量中。

在这个

int i = 3;
byte bb = i; //error!

文字3是一个常量表达式,但变量i不是。编译器只是简单地认为i它不是一个常量表达式,因此不会竭尽全力找出它的值,对的转换byte可能会丢失信息(如何转换12345byte?),因此不应该被允许。您可以通过制作i一个常量变量来覆盖此行为

final int i = 3;
byte bb = i; // no error!

或通过指定显式强制转换

int i = 3;
byte bb = (byte) i; // no error!


 类似资料:
  • 在Haskell中有一个默认的单位类型,即()。我正在寻找一个多态的(最好是在Hackage中),例如: 或者可能是多态零型: 所以,是的,我可以自己写一个,通过上面的陈述。我想在hackage找一个。 我之所以需要它,是因为我有一个具有多个类型参数的类,其中包含一个不使用其中一个参数的函数: 使用此函数“someFunction”时,GHC找不到正确的实例,因此我更改了定义: 现在,当我调用某物

  • 问题内容: 我遇到了一些具有以下结构的Java代码: 我知道在C ++中,我可以为参数分配一个默认值。例如: Java是否支持这种语法?有什么理由使两步语法更可取? 问题答案: 我遇到了一些具有以下结构的Java代码: 我知道在C ++中,我可以为参数分配一个默认值。例如: Java是否支持这种语法?有什么理由使两步语法更可取?

  • 问题内容: 在Java中,默认情况下所有类都扩展了任何默认类吗? 示例:如果我有一个简单的课程,例如: 此类默认情况下是否扩展了类? 问题答案: class是所有类的超类。 类对象是类层次结构的根。每个类都有Object作为超类。所有对象(包括数组)都实现此类的方法。 您可以测试一下:

  • 所以,我一直在读C++标准,找到了[defns.Undefined](3.27,在我正在读的C++17草案中,请注意,当我在这里引用C++17时,我在其他标准中发现了类似的措辞)--这是未定义行为的定义。我注意到这样的措辞(强调我的): 注意:当本国际标准省略任何行为的明确定义时,或者当程序使用错误的构造或错误的数据时,可能会出现未定义的行为 现在,想想看,这有点道理。这有点像是说,如果标准没有给

  • 问题内容: 根据我对正则表达式的理解,字符串“ 00 ###”必须与“ [0-9]”匹配,但不能与“ ^ [0-9] $”匹配。但这不适用于Java regexp。 在对此问题进行了一些调查之后,我发现了以下信息(http://www.wellho.net/solutions/java-regular- expressions-in-java.html ): 似乎Java正则表达式默认同时带有^和

  • 为什么引用类型对象o无法访问变量a。它显示错误a无法解决或不是字段。