public class AutoBox {
public static void main(String[] args) {
Integer integer1 = 127;
Integer integer2 = 127;
Integer integer3 = 128;
Integer integer4 = 128;
System.out.println(integer1 == integer2);
System.out.println(integer3 == integer4);
}
}
//结果:
true
false
//结果分析
当一个int类型的数据在 -128~127 之间(即一个字节)的时候,当把它包装成一个Integer类型时,会把这个数据放在一个缓冲池中,在下次把同一个数据包装成Integer类型时,就直接去缓冲池中拿,这就是设计模式中的“享元模式”。因此integer2与integer1拿到的是同一个对象,对应的当然是同一个地址,因此打印结果为true。
Integer integer3 = 128; 会新建一个对象,假设对象的地址是address3,对象内容是128Integer integer4 = 128; 也会新建一个对象,假设对象的地址是address4,对象内容也是128因为 “integer3 == integer4” 比较的是两个对象的地址而不是对象的内容,显然地址是不一样的,因此返回false。
详细例子:
public class AutoBox {
public static void main(String[] args) {
Integer integer1 =new Integer(127);
Integer integer2 =new Integer(127);
System.err.println(integer1 == integer2);
Integer integer3 =new Integer(128);
Integer integer4 =new Integer(128);
System.err.println(integer3 == integer4);
Integer integer5 = Integer.valueOf(127);
Integer integer6 = Integer.valueOf(127);
System.err.println(integer5 == integer6);
Integer integer7 = Integer.valueOf(128);
Integer integer8 = Integer.valueOf(128);
System.err.println(integer7 == integer8);
Integer i9 = 127;
Integer i10 = 127;
System.err.println(i9 == i10);
Integer i11 = 128;
Integer i12 = 128;
System.err.println(i11 == i12);
}
}
结果:
false
false
true
false
true
false
http://blog.sina.com.cn/s/blog_6b2757530100le07.html
分享到:
相关推荐
- **包装类缓冲池:** - 虚拟机为包装类提供缓冲池,如`Integer`池的默认范围为-128到127。 **字符串缓冲池** - **String常量池:** - Java提供了一个字符串缓冲池以优化字符串操作。 - 面试题示例: - `...
- **包装类的缓冲池**: - 例如Integer的缓冲池,对于-128到127之间的整数,直接从缓存获取,提高效率。 - **String对象**: - 字符串池:Java为优化字符串操作提供,常量池的一部分。 - 字符串创建的区别: -...
在Java中,包装类型具有缓冲池机制,以提高性能。 1. **Integer缓存池**:在-128到127的整数值范围内,Integer对象会复用已存在的实例,避免重复创建。这是因为Integer类中有一个私有的静态内部类IntegerCache,它...
包装类有缓冲池,例如Integer池范围是-128到127,以提高性能。 - **自动装箱与拆箱**:例如`Integer x = 1; x = x + 1;`涉及了从int到Integer的装箱,Integer相加的拆箱再装箱过程。 这些是Java Web开发的基本概念...
- 给出的代码片段展示了如何使用`Integer`包装类将命令行参数(字符串形式的数字)转换为整型,然后使用`StringBuffer`创建并打印星号(*)组成的矩形。 这些只是Java葵花宝典中的一部分内容,实际文档还可能包含更...
- Java的每个基本数据类型都有对应的包装类,如`Integer`、`Double`等,它们使得基本类型可以作为对象使用,比如在容器类如`Vector`中存储。 - 将字符串转换为基本数据类型的方法有`Integer.parseInt()`、`Integer...
6. **包装类和自动装箱拆箱**:了解Integer、Double等基本类型包装类的特性,以及与基本类型之间的转换,包括自动装箱和拆箱的过程。 7. **内存管理**:理解Java的内存模型,包括堆内存、栈内存和方法区,以及对象...
7. **包装类**:学习Java为每个原始类型提供的包装类,如Integer、Double、Boolean等,以及它们的自动装箱和拆箱机制。 8. **接口与抽象类**:理解接口的定义和实现,以及抽象类的作用,如何通过接口实现多继承,...
6. **包装类和日期时间API**:了解Integer、Double等包装类的作用,以及它们在数值转换中的应用。学习Java 8引入的新的日期和时间API,如LocalDate、LocalTime和LocalDateTime。 7. **泛型**:理解泛型的概念,如何...
// 使用Integer包装类 Class c2 = int.class; // 基本类型的Class Class c3 = new Integer(6).getClass(); // 另一个Integer实例 System.out.println("C1==C2?: " + (c1 == c2) + ", C1==C3?: " + (c1 == c3)); ...
10. **Java变量类型间的相互转换**:包括基本类型与包装类之间的自动装箱拆箱,以及不同类型间的转换。 11. **JAVA与WEB**:包括JMX(Java Management Extensions)用于管理Java应用程序,以及Java在Web开发中的...
- **包装类**:为基本类型提供了对象表示,如`Integer`、`Character`和`Boolean`,提供了额外的方法和功能,如比较、格式化等。 - **自动装箱与拆箱**:Java 5引入的特性,使得基本类型与对应的包装类之间可以自动...
Java中的一些包装类(如 `Integer`、`Byte`、`Short`、`Character` 和 `Boolean`)实现了缓存机制。例如,`Integer` 类有一个 `cache` 字段,该字段缓存了一定范围内的 `Integer` 对象,以提高性能。这种方式减少了...
对于基本数据类型,Java提供了对应的包装类,如Integer、Double等,这些包装类支持自动装箱(对象到基本类型)和拆箱(基本类型到对象)操作。 String在Java中是不可变的,这意味着一旦创建了String对象,其内容就...
- `Integer`是`int`的包装类,它可以表示整数并提供了更多的操作方法,如数学运算和格式化输出等。 - 包装类可以自动装箱和拆箱,使得它们能够更方便地与集合框架一起工作。 #### 4. 异常处理机制 - **知识点...
- **Integer**: 包装类,可以为null。 - **int**: 基本数据类型,不可为null。 **1.15 Math.round()函数的计算规则** - **Math.round(11.5)**: 结果为`12`。 - **Math.round(-11.5)**: 结果为`-11`。 - **规则**: ...
最后提到了基本数据类型的包装类,如Integer。这些类的作用是将Java的基本数据类型(如int)包装成对象,以便在需要对象而不是原始类型的地方使用。例如,`Vector`类的`add`方法接受对象作为参数,不能直接添加基本...
对应的包装类(如Integer, Float)提供了额外的功能。 5. **Class, ClassLoader**: - **Class**: 代表运行时的类信息,如类名、方法、字段等。`Class.forName()`用于动态加载类。 - **ClassLoader**: 负责加载类...