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

整数== Java中允许的int

申屠昌胤
2023-03-14
问题内容

我想知道与int相比,java是否自动将Integer转换为int?还是==尝试比较原始元素上的引用?

这是真的i.intValue()==2吗?还是我需要做?

Integer i = Integer.valueOf(2);
if (i==2){
//always?
}

问题答案:

是的,int使用==参数进行比较时,如有必要,将取消装箱。

Java语言规范的相关部分:

15.21.1数值相等运算符==和!=

如果相等html" target="_blank">运算符的操作数都是数字类型,或者一个是数字类型,而另一个可以转换(第5.1.8节)为数字类型,则对操作数(第5.6.2节)执行二进制数字提升。如果操作数的提升类型为int或long,则执行整数相等性测试;否则,执行整数相等性测试。如果提升的类型为float或double,则执行浮点相等性测试。

请注意,二进制数值提升执行值集转换(第5.1.13节)和拆箱转换(第5.1.8节) 。无论从哪个值集提取其代表值,都可以对浮点值精确地进行比较。

同样适用于<<=>>=等,以及+-*等等。

所以,

System.out.println(Integer.valueOf(17) == 17);

打印true:-)

但是您可以将两个相等的字符串与==进行比较,有时会根据字符串的合并方式得出true或fals …

是的,实际上也有类似的情况Integers

装箱(转换intInteger)时,编译器将缓存用于较小的值(-128-127),并将相同的对象重用于相同的值,因此也许有些令人惊讶,我们具有以下内容:

System.out.println(Integer.valueOf(100) == Integer.valueOf(100)); // prints true
System.out.println(Integer.valueOf(200) == Integer.valueOf(200)); // prints false


 类似资料:
  • 我一直在捕捉非数字时遇到问题。 我试过了,但抓不住。如果我让它捕获非数字,但不让用户再次尝试输入。。。它完全停止了我的代码。 这是我的密码:

  • 标题几乎概括了我希望发生的事情。 这是我所拥有的,虽然程序不会在非正整数上爆炸,但我希望用户被告知非正整数基本上是无稽之谈。 和输出: 带有负数的输出: 现在,显然我可以添加一个if来确定是否定的,但我很好奇是否有办法在级别捕获它,以便利用自动使用打印。 理想情况下,它会打印类似的东西: 像这样: 现在我正在这么做,我想我很高兴:

  • 这大约是两个操作数中转换为字节后两个整数的总和。我只是试图理解为什么以下输出在Java中完美运行: 后者在编译时失败: 除了用作操作数的int值之外,它们是相同的。在这两种情况下,结果都超出范围,但只有第二个代码段会抛出编译时错误(尽管其结果小于前一个)。为什么会这样?

  • 问题内容: 我正在将CSV插入表中。我对CSV中的内容没有任何控制,很多字段为空白。例如,在我的第一条记录中,“ baths_full”字段为空(两个逗号背对背)。 在运行MySQL 5.5.37的生产服务器上,它将带​​有的记录插入为空字段。在运行MySQL 5.6.19的本地计算机上,出现以下错误: 奇怪的是,表的架构是相同的。实际上,我使用生产机器的导出来创建本地数据库。 该字段设置为Tin

  • 问题内容: 标题几乎总结了我想发生的事情。 这就是我所拥有的,虽然程序不会在非正整数上崩溃,但我希望通知用户非正整数基本上是无稽之谈。 并输出: 输出为负: 现在,显然我可以添加一个if来确定是否为负,但是我很好奇是否有一种方法可以将其捕获到该级别,以便利用自动用法打印。 理想情况下,它将打印类似于以下内容的内容: 像这样: 现在我正在这样做,我想我很高兴: 问题答案: 这应该是可以利用的。您仍然

  • 问题内容: 我有一个基于Java的Web服务客户端,该客户端连接到Java Web服务(在Axis1框架上实现)。 我的日志文件中出现以下异常: 问题答案: 这通常是由XML声明前的空白引起的,但是它可以是任何文本,例如破折号或任何字符。我说这通常是由空白引起的,因为人们认为空白始终是可忽略的,但事实并非如此。 经常发生的另一件事是UTF-8 BOM(字节顺序标记),如果将文档作为字符流传递给XM