java在编译的时候
Integer i = 20;
被译成
Integer i = Integer.valueOf(2);
JDK源代码
private static class IntegerCache {
private IntegerCache(){}
static final Integer cache[] = new Integer[-(-128) + 127 + 1];
static {
for(int i = 0; i < cache.length; i++)
cache[i] = new Integer(i - 128);
}
}
public static Integer valueOf(int i) {
final int offset = 128;
if (i >= -128 && i <= 127) { // must cache
return IntegerCache.cache[i + offset];
}
return new Integer(i);
}
就看出来 有一个cache数组 范围是0~~255 里面数值是-128 到127
if (i >= -128 && i <= 127)
所以当i的值在-128到127直接 其实是一个对象
Integer cache[]
而在这个范围外就是另外一个对象了
return new Integer(i);
所以用==比 就是比引用 就是FALSE
但是重写了equles
用equles这个方法比就是TRUE
这是Java处于性能的考虑,目的是节省内存。
至于范围之外的,不同的引用当然不相等了
分享到:
相关推荐
Integer i2 = 100; if (i1 == i2) { System.out.println("i1==i2"); } else { System.out.println("i1!=i2"); } ``` 结果将是 "i1==i2",因为 i1 和 i2 引用的是同一个对象。 然而,如果我们将代码修改为: ```...
在表达式`i1 == i2 + i3`或`i4 == i5 + i6`中,我们看到`==`操作符被用于比较`Integer`对象。在这种情况下,Java会进行拆箱操作,即将`Integer`对象转换为其对应的`int`值,然后进行数值比较。由于`i2`和`i3`(或者`...
Integer i2 = new Integer(127);System.out.println(i1 == i2);//false System.out.println(i1.equals(i2));//true这里的 i1 == i2 的结果为 false,是因为它们是不同的对象,而 i1.equals(i2) 的结果为 true,是...
For I = 2 To 100 Step 2 s = s + I Next I Print "s="; s ``` 或者使用`Do...Loop`: ```vb Dim i As Integer, s As Integer i = 2 s = 0 Do While i <= 100 s = s + i i = i + 2 Loop Print "s="; s ``` 练习...
Integer i = new Integer(1); // 创建对象,并存储数值 2. 初始化 int 是基本类型,可以直接赋值,而 Integer 需要创建对象: int i = 1; // 直接赋值 Integer i = new Integer(1); // 创建对象,并赋值 3. 数据...
Integer i = new Integer(1); // 复杂数据类型 ``` 初始化 在初始化时,int 和 Integer 也有所不同。int 可以直接赋值,而 Integer 需要使用 new 关键字来创建一个对象。 ```java int i = 1; // 直接赋值 Integer...
Option ExplicitDim cnt As IntegerDim numarr() As IntegerPrivate Sub Form_Load()cmdprint.Enabled = False cnt = 5 ReDim numarr(4) Dim i As Integer For i = 0 To 4 numarr(i) = Int(Rnd * 49 + 1) Next i ...
Dim N As Integer , I As Integer , S As Integer For N = 1 To 1000 S = 0 For I = 1 To N/2 If N Mod I = 0 Then S = S + I Next If S = N Then Print N Next 3. 求组合数Cmn Private Sub Command1_Click()...
`虽然这两行代码看起来像是创建了两个Integer对象,但实际上,由于享元模式的存在,i1和i2实际上是引用了同一个对象,因此`i1 == i2`会返回true。 相比之下,如果创建的Integer对象值在-128到127范围之外,如`...
System.out.println("Integer.toString(int i, int radix): " + Integer.toString(i1, 16)); ``` 上述代码将整数54321转换为其十六进制表示"d431"。 - **valueOf方法**:`valueOf`方法可以将字符串或特定进制的...
int与integer的区别从大的方面来说是基本数据类型与其包装类的区别: int 是基本类型,直接存数值,而integer是对象,用一个引用指向这个对象 1.Java 中的数据类型... 使得对Integer类也可使用:Integer i= 1
cache[i] = new Integer(i - 128); } } } ``` 这个类用于缓存-128 到 127 之间的整数对象。在静态代码块中,它创建了一个数组,缓存了所有在这个范围内的整数对象。 现在,让我们回到前面的代码: ```java ...
LinkedList<Integer> ab=new LinkedList(); for(int i=0;i;i++) ab.add(i+1); for(;;){ if(ab.size()==0)break;//结束条件 int i=1; while(i!=M){ ab.add(ab.remove());//如果没有报到M这个数字的人将其从...
Integer i = 5; Integer j = 5; System.out.println(i.equals(j)); // 输出 true,Integer类的equals方法比较的是值 Integer k = new Integer(5); Integer l = new Integer(5); System.out.println(k.equals(l)); /...
integer i = (Integer) session.createQuery("select count(*) from customer").uniqueResult(); ``` 2. `min()`:求最小值。例如,查询`customer`表中客户的最小年龄: ```java integer i = (Integer) ...
Integer i2 = 100; System.out.println("i1==i2: " + (i1 == i2)); // 输出:i1==i2: true ``` 对于超出此范围的值,每次都会创建一个新的对象,因此: ```java Integer i3 = 200; Integer i4 = 200; System.out....
for (Integer i = 1; i <= number; i++) { a[i-1] = i.toString(); } if (beingModifiNumberBox == null) { beingModifiNumberBox = new JComboBox(a); beingModifiNumberBox....
if (i >= IntegerCache.low && i <= IntegerCache.high) return IntegerCache.cache[i + (-IntegerCache.low)]; return new Integer(i); } ``` ##### 其他包装类的常量池实现 其他包装类如`Short`、`Byte`、`...
### 整数分解(Integer Factorization) #### 问题描述 整数分解问题是一个经典的数学问题,在计算机科学领域也有广泛的应用,比如密码学中的RSA算法就依赖于大整数分解的难度。本问题要求对一个给定的正整数n进行...