`
咖啡猪猪
  • 浏览: 16716 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

Integer对象 == 的真相

阅读更多

今天偶然看到一篇帖子,竞猜

 

Integer a=10;
Integer b=10;
Integer c=new Integer(10);
Integer d=new Integer(10);
        
System.out.println(a==b);
System.out.println(c==d);
        
System.out.println(a.equals(b));
System.out.println(c.equals(d));
        
System.out.println(a.equals(c));
 

 

结果为

 

true
false
true
true
true
 

 

关于equals() 方法就不提了,这里主要说一下 ==

 

再看一个例子

 

Integer a = 127;
Integer b = 127;
Integer c = 128;
Integer d = 128;
System.out.println(a == b);
System.out.println(c == d);
 

 

结果为

 

true
false
 

 

答案解析:

1.== 比较的是对象的引用

当且仅当比较的两个引用指向同一对象才返回true

 

2.Integer i = XXX

看看Integer 的源代码就知道了,其实就是Integer-127-128 之间的每个值都建立了一个对应的Integer 对象,类似一个缓存。由于Integer 是不可变类,因此这些缓存的Integer 对象可以安全的重复使用。

   Integer i = XXX ,就是Integer i = Interger.valueOf(XXX), 首先判断XXX 是否在-127-127 之间,如果是直接return 已经存在的对象,否则就只能new 一个了。

分享到:
评论
1 楼 jinyuhanxue 2009-11-24  
李组长的文章总是那么的言简意赅,顶下~

相关推荐

    JAVA Integer == equal 比较 doc 比较大小 是否相等

    在 Java 中,Integer 对象在 -128 到 127 之间的值是缓存的,这意味着在这个范围内的所有 Integer 对象都是同一个对象引用。因此,当我们创建两个 Integer 对象,并将它们的值设置在这个范围内时,它们将引用的是同...

    Integer创建对象

    因此,当尝试创建一个新的`Integer`对象时,如果其值在-128到127之间,JVM会直接从对象池中获取已存在的对象引用,而不是每次都创建新的对象。这就是为什么以下代码: ```java Integer i1 = 40; Integer i2 = 40; ``...

    动态创建菜单、树

    integer width = 1381 integer height = 620 boolean titlebar = true string title = "Untitled" boolean controlmenu = true windowtype windowtype = response! long backcolor = 67108864 string icon = "App...

    用VHDL语言编写的VGA显示彩条

    constant h_data: integer:=640; constant h_front: integer:=16; constant h_back: integer:=48; constant h_sync: integer:=96; constant h_period: integer:= h_sync + h_data + h_front + h_back; -- ...

    用st控件来做spliter分割条

    Integer ii_barwidth = -1 // Default to negative value. long il_barcolor=78682240 long il_barmovecolor=8421504 integer ii_minobjectsize = 20 boolean ib_performredraw=True //-- Internal ...

    java包装类练习.doc

    Integer i = new Integer(xxx) 和 Integer i = xxx 的区别在于,前者创建了一个新的对象,而后者可能会从常量池中返回该对象的引用。如果 xxx 的值在 -128 到 127 之间,那么 Integer i = xxx;就可能会从常量池中...

    Java中int和Integer的区别.doc

    int 是基本数据类型,直接存储数值,而 Integer 是一个类,需要创建对象并存储数值。例如: int i = 1; // 基本类型,直接存储数值 Integer i = new Integer(1); // 创建对象,并存储数值 2. 初始化 int 是基本...

    55丨享元模式(下):剖析享元模式在JavaInteger、String中的应用1

    `虽然这两行代码看起来像是创建了两个Integer对象,但实际上,由于享元模式的存在,i1和i2实际上是引用了同一个对象,因此`i1 == i2`会返回true。 相比之下,如果创建的Integer对象值在-128到127范围之外,如`...

    Integer缓存池案例1

    当我们在程序中创建Integer对象时,如果值在-128到127之间,Integer对象会直接从缓存池中获取或复用已存在的对象,避免了重复创建。这是因为Java的自动装箱拆箱机制,使得Integer和int之间的转换更加便捷,但同时也...

    JAVA-int和Integer的区别1.zip

    这意味着在这个范围内创建`Integer`对象时,如果已有相同的值存在,就会复用已存在的对象,避免了重复的内存分配。这个特性在处理大量小整数时能提高效率,但也可能导致预期之外的行为,如两个不同的`Integer`引用...

    Java中int和Integer的区别.doc.doc

    int 可以直接赋值,而 Integer 需要使用 new 关键字来创建一个对象。 ```java int i = 1; // 直接赋值 Integer i = new Integer(1); // 创建一个对象 ``` 类型转换 int 和 Integer 之间的类型转换也有一些特殊的...

    Java中的==和equals区别

    然而,在许多情况下,特别是对于自定义类或Java标准类库中的类(如`String`、`Integer`等),`equals`方法被重写来比较对象的实际内容。 ##### 示例: ```java String str1 = "hello"; String str2 = "hello"; ...

    JAVA中Integer值的范围实例代码

    然后,我们创建了一个新的 `Integer` 对象 `b`,它指向同一个对象。接着,我们执行 `a++` 语句,这时 `a` 的值变为 101,并且指向了一个新的对象。因此,`a==b` 返回 false。 Java 中 Integer 值的范围实例代码的...

    Add Digits

    一个给定的正整数,循环的将每一位相加,只要得到的结果是大于10的数,就继续循环相加

    基于cyclone2 FPGA设计的VGA显示Quartus工程VHDL源码+文档说明.rar

    基于cyclone2 FPGA设计的VGA显示飞机小游戏Quartus工程源码+文档说明 library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL;...-- life_enemy:in integer

    JAVA-int和Integer的区别

    创建一个`Integer`对象会占用更多内存,因为它包含了一个指向`int`值的引用以及对象本身的开销。由于`Integer`是对象,所以它可以使用面向对象的特性,如方法重载、继承等。`Integer`的范围比`int`大,它可以存储-2^...

    bigdecimal转integer.docx

    在某些情况下,我们可能需要将 `BigDecimal` 对象转换为 `Integer` 对象。本文将详细介绍三种将 `BigDecimal` 转换为 `Integer` 的方法。 1. 使用 `intValue()` 方法 `intValue()` 方法是最直接的转换方式,它会...

    Integer类的使用方法

    在Java编程语言中,`Integer`类是一个非常重要的封装类,它用于将基本数据类型`int`封装成对象。这不仅增强了数据的灵活性,还提供了许多实用的方法来处理整数相关的操作。下面,我们将深入探讨`Integer`类的使用...

    NDI_Dec.zip

    VID_ADDR_WIDTH : integer := 32; VID_BURST_WIDTH : integer := 8; VID_BURST_LENGTH : integer := 8; NDI_ADDR_WIDTH : integer := 32; NDI_BURST_WIDTH : integer := 8; NDI_BURST_LENGTH : integer := 8 ...

    Java基础之Integer使用的注意事项及面试题

    Java 中的 Integer 对象是一种 wrapper class,它可以将基本类型 int 转换为对象。然而,在使用 Integer 对象时,需要注意一些细节,以避免出现意外的结果。 首先,Integer 对象在 Java 中的缓存机制,-128 到 127 ...

Global site tag (gtag.js) - Google Analytics