当前位置: 首页 > 知识库问答 >
问题:

Java使用Integer.Parseint进行比较[duplicate]

巴英韶
2023-03-14
Integer x1 = Integer.parseInt("4");
Integer y1 = Integer.parseInt("4");
Integer x2 = Integer.parseInt("444");
Integer y2 = Integer.parseInt("444");

System.out.println(x1==y1); // true
System.out.println(x2==y2); // false ???

Integer a1 = Integer.valueOf("4");
Integer b1 = Integer.valueOf("4");
Integer a2 = Integer.valueOf("444");
Integer b2 = Integer.valueOf("444");

System.out.println(a1==b1); // true
System.out.println(a2==b2); // false

我明白为什么第三个和第四个输出打印真和假。这是因为valueof返回一个对象,包装类缓存值在-128到127范围内的对象。如果向valueof传递了该范围内的任何值,则它应该重用缓存中的对象。否则,它将创建一个新对象。

现在,为什么第二个输出打印出false?我以为parseint返回一个原语,而不是像valueof那样返回一个对象。

共有1个答案

柳钟展
2023-03-14

我以为parseInt返回一个原语,而不是像valueOf那样返回一个对象。

parseint返回int但您将其赋给integer变量,这将导致自动装箱。由于值为444int被自动装箱两次,每次都创建一个新的integer实例(因为integer缓存不能用于该值),因此将它们与==比较返回false

如果将parseint的输出赋给int,那么在这两种情况下,比较都将返回true:

int x1 = Integer.parseInt("4");
int y1 = Integer.parseInt("4");
int x2 = Integer.parseInt("444");
int y2 = Integer.parseInt("444");

System.out.println(x1==y1); // true
System.out.println(x2==y2); // true
 类似资料:
  • 我有两个带有JSONObject的ArrayList,我需要比较这两个,并从中找到不同的项,到目前为止,这是我的代码,我收到的输出是不正确的。 公共静态空格main(字符串args[]){

  • 问题内容: 我正在开发需要检查作业截止日期的应用程序。我想知道到期日期是否在下个星期之内,然后再执行一项操作。 我可以找到的大多数文档都在Objective-C中,但我不知道如何在Swift中完成。谢谢您的帮助!! 问题答案: 我喜欢使用扩展使代码更具可读性。以下是一些NSDate扩展,它们可以帮助清理代码并使其易于理解。我把它放在一个sharedCode.swift文件中: 现在,如果您可以执行

  • 我必须写一个程序 > 使用一个类ShopItem,其中一个项目的属性是:barCodeNumber、itemName、price和QuantityInStock。创建5个ShopItems实例(item1、item2、item3、item4和item5)的属性值为我自己的值。 为ShopItem使用一个比较器(BarcodeParator),它允许基于它们的barCodeNumber对ShopIt

  • 我正在Mac OS X上使用Datastax cassandra发行版(DSC-Cassandra-1.2.6)。我想使用timeuuid类型,并尝试对它们进行查询。 这是我的桌子: cqlsh:pagedb>从test_t中选择canon_key,t,dateOf(t),unixTimestampOf(t),其中canon_key='xxx'和t>=minTimeuuid('2013-08-08

  • 问题内容: 我的问题是 我必须订购一个数据表。表的每一行都是一个存储在List中的对象(简称为TableObject)。数据的每一列都是该类的属性(通常是String)。 当用户单击任何列时,我必须对数据进行典型的排序。所以我考虑过将List更改为TreeSet并在TableObject中实现Comparator。 当我尝试重新排序TreeSet时出现问题。首先比较起来比较容易(省略parseIn

  • 问题内容: 为了比较两个浮点数(float64)在Go中的相等性,我对IEEE 754和浮点数的二进制表示的肤浅理解使我认为这是一个很好的解决方案: 问题是:与旧的hack 相比,这是一种更通用,更精确,更有效的方法来比较两个任意大或小的浮点数以“几乎相等” 吗?我的理由是,如果一个二进制表示形式仅允许一位差异,那么除了严格的相等性(显然可以如注释中所指出的那样)之外,比较的数字当然不能再相等了(