今天偶然看到一篇帖子,竞猜
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
一个了。
分享到:
- 2009-11-24 21:56
- 浏览 7107
- 评论(1)
- 论坛回复 / 浏览 (1 / 1450)
- 查看更多
相关推荐
在 Java 中,Integer 对象在 -128 到 127 之间的值是缓存的,这意味着在这个范围内的所有 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...
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; -- ...
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 ...
Integer i = new Integer(xxx) 和 Integer i = xxx 的区别在于,前者创建了一个新的对象,而后者可能会从常量池中返回该对象的引用。如果 xxx 的值在 -128 到 127 之间,那么 Integer i = xxx;就可能会从常量池中...
int 是基本数据类型,直接存储数值,而 Integer 是一个类,需要创建对象并存储数值。例如: int i = 1; // 基本类型,直接存储数值 Integer i = new Integer(1); // 创建对象,并存储数值 2. 初始化 int 是基本...
`虽然这两行代码看起来像是创建了两个Integer对象,但实际上,由于享元模式的存在,i1和i2实际上是引用了同一个对象,因此`i1 == i2`会返回true。 相比之下,如果创建的Integer对象值在-128到127范围之外,如`...
当我们在程序中创建Integer对象时,如果值在-128到127之间,Integer对象会直接从缓存池中获取或复用已存在的对象,避免了重复创建。这是因为Java的自动装箱拆箱机制,使得Integer和int之间的转换更加便捷,但同时也...
这意味着在这个范围内创建`Integer`对象时,如果已有相同的值存在,就会复用已存在的对象,避免了重复的内存分配。这个特性在处理大量小整数时能提高效率,但也可能导致预期之外的行为,如两个不同的`Integer`引用...
int 可以直接赋值,而 Integer 需要使用 new 关键字来创建一个对象。 ```java int i = 1; // 直接赋值 Integer i = new Integer(1); // 创建一个对象 ``` 类型转换 int 和 Integer 之间的类型转换也有一些特殊的...
然而,在许多情况下,特别是对于自定义类或Java标准类库中的类(如`String`、`Integer`等),`equals`方法被重写来比较对象的实际内容。 ##### 示例: ```java String str1 = "hello"; String str2 = "hello"; ...
然后,我们创建了一个新的 `Integer` 对象 `b`,它指向同一个对象。接着,我们执行 `a++` 语句,这时 `a` 的值变为 101,并且指向了一个新的对象。因此,`a==b` 返回 false。 Java 中 Integer 值的范围实例代码的...
一个给定的正整数,循环的将每一位相加,只要得到的结果是大于10的数,就继续循环相加
基于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
创建一个`Integer`对象会占用更多内存,因为它包含了一个指向`int`值的引用以及对象本身的开销。由于`Integer`是对象,所以它可以使用面向对象的特性,如方法重载、继承等。`Integer`的范围比`int`大,它可以存储-2^...
在某些情况下,我们可能需要将 `BigDecimal` 对象转换为 `Integer` 对象。本文将详细介绍三种将 `BigDecimal` 转换为 `Integer` 的方法。 1. 使用 `intValue()` 方法 `intValue()` 方法是最直接的转换方式,它会...
在Java编程语言中,`Integer`类是一个非常重要的封装类,它用于将基本数据类型`int`封装成对象。这不仅增强了数据的灵活性,还提供了许多实用的方法来处理整数相关的操作。下面,我们将深入探讨`Integer`类的使用...
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 对象是一种 wrapper class,它可以将基本类型 int 转换为对象。然而,在使用 Integer 对象时,需要注意一些细节,以避免出现意外的结果。 首先,Integer 对象在 Java 中的缓存机制,-128 到 127 ...