基本类型的包装类对象使用 == 和 equals进行比较的结果
1、值不同,使用==和equals比较都返回false
2、值相同
使用==比较:
- 基本类型-基本类型、基本类型-包装对象返回true
- 包装对象-包装对象返回false
- 缓存中去的包装对象比较返回true(JVM 缓存部分基本类型常用的包装类对象,如 Integer 缓存 -128 ~ 127 )
Integer i1 = 100;
Integer i2 = 100;
Integer i3 = 200;
Integer i4 = 200;
(i1==i2); //打印true
(i3==i4); //打印false
使用equals比较:
- 包装对象-基本类型返回true
- 包装对象-包装对象返回true
3、不同类型的对象对比,返回 false
JDK1.8,实验代码
byte b1 = 127;
Byte b2 = new Byte("127");
Byte b3 = new Byte("127");
("Byte 基本类型和包装对象使用 == 比较 : " + (b1 == b2));
("Byte 基本类型和包装对象使用 equals 比较 : " + (b1));
("Byte 包装对象和包装对象使用 == 比较 : " + (b2 == b3));
("Byte 包装对象和包装对象使用 equals 比较 : " + (b3));
();
short s1 = 12;
Short s2 = new Short("12");
Short s3 = new Short("12");
("Short 基本类型和包装对象使用 == 比较 : " + (s1 == s2));
("Short 基本类型和包装对象使用 equals 比较 : " + (s1));
("Short 包装对象和包装对象使用 == 比较 : " + (s2 == s3));
("Short 包装对象和包装对象使用 equals 比较 : " + (s3));
();
char c1 = 'A';
Character c2 = new Character('A');
Character c3 = new Character('A');
("Character 基本类型和包装对象使用 == 比较 : " + (c1 == c2));
("Character 基本类型和包装对象使用 equals 比较 : " + (c1));
("Character 包装对象和包装对象使用 == 比较 : " + (c2 == c3));
("Character 包装对象和包装对象使用 equals 比较 : " + (c3));
();
int i1 = 10000;
Integer i2 = new Integer(10000);
Integer i3 = new Integer(10000);
("Integer 基本类型和包装对象使用 == 比较 : " + (i1 == i2));
("Integer 基本类型和包装对象使用 equals 比较 : " + (i1));
("Integer 包装对象和包装对象使用 == 比较 : " + (i2 == i3));
("Integer 包装对象和包装对象使用 equals 比较 : " + (i3));
();
long l1 = 1000000000000000L;
Long l2 = new Long("1000000000000000");
Long l3 = new Long("1000000000000000");
("Long 基本类型和包装对象使用 == 比较 : " + (l1 == l2));
("Long 基本类型和包装对象使用 equals 比较 : " + (l1));
("Long 包装对象和包装对象使用 == 比较 : " + (l2 == l3));
("Long 包装对象和包装对象使用 equals 比较 : " + (l3));
();
float f1 = 10000.111F;
Float f2 = new Float("10000.111");
Float f3 = new Float("10000.111");
("Float 基本类型和包装对象使用 == 比较 : " + (f1 == f2));
("Float 基本类型和包装对象使用 equals 比较 : " + (f1));
("Float 包装对象和包装对象使用 == 比较 : " + (f2 == f3));
("Float 包装对象和包装对象使用 equals 比较 : " + (f3));
();
double d1 = 10000.111;
Double d2 = new Double("10000.111");
Double d3 = new Double("10000.111");
("Double 基本类型和包装对象使用 == 比较 : " + (d1 == d2));
("Double 基本类型和包装对象使用 equals 比较 : " + (d1));
("Double 包装对象和包装对象使用 == 比较 : " + (d2 == d3));
("Double 包装对象和包装对象使用 equals 比较 : " + (d3));
();
boolean bl1 = true;
Boolean bl2 = new Boolean("true");
Boolean bl3 = new Boolean("true");
("Boolean 基本类型和包装对象使用 == 比较 : " + (bl1 == bl2));
("Boolean 基本类型和包装对象使用 equals 比较 : " + (bl1));
("Boolean 包装对象和包装对象使用 == 比较 : " + (bl2 == bl3));
("Boolean 包装对象和包装对象使用 equals 比较 : " + (bl3));
运行结果
Byte 基本类型和包装对象使用 == 比较 : true
Byte 基本类型和包装对象使用 equals 比较 : true
Byte 包装对象和包装对象使用 == 比较 : false
Byte 包装对象和包装对象使用 equals 比较 : true
Short 基本类型和包装对象使用 == 比较 : true
Short 基本类型和包装对象使用 equals 比较 : true
Short 包装对象和包装对象使用 == 比较 : false
Short 包装对象和包装对象使用 equals 比较 : true
Character 基本类型和包装对象使用 == 比较 : true
Character 基本类型和包装对象使用 equals 比较 : true
Character 包装对象和包装对象使用 == 比较 : false
Character 包装对象和包装对象使用 equals 比较 : true
Integer 基本类型和包装对象使用 == 比较 : true
Integer 基本类型和包装对象使用 equals 比较 : true
Integer 包装对象和包装对象使用 == 比较 : false
Integer 包装对象和包装对象使用 equals 比较 : true
Long 基本类型和包装对象使用 == 比较 : true
Long 基本类型和包装对象使用 equals 比较 : true
Long 包装对象和包装对象使用 == 比较 : false
Long 包装对象和包装对象使用 equals 比较 : true
Float 基本类型和包装对象使用 == 比较 : true
Float 基本类型和包装对象使用 equals 比较 : true
Float 包装对象和包装对象使用 == 比较 : false
Float 包装对象和包装对象使用 equals 比较 : true
Double 基本类型和包装对象使用 == 比较 : true
Double 基本类型和包装对象使用 equals 比较 : true
Double 包装对象和包装对象使用 == 比较 : false
Double 包装对象和包装对象使用 equals 比较 : true
Boolean 基本类型和包装对象使用 == 比较 : true
Boolean 基本类型和包装对象使用 equals 比较 : true
Boolean 包装对象和包装对象使用 == 比较 : false
Boolean 包装对象和包装对象使用 equals 比较 : true
ps:可以延伸一个问题,基本类型与包装对象的拆/装箱的过程
【Java面试题与答案】整理推荐
- 基础与语法
- 集合
- 网络编程
- 并发编程
- Web
- 安全
- 设计模式
- 框架
- 算法与数据结构
- 异常
- 文件解析与生成
- Linux
- MySQL
- Oracle
- Redis
- Dubbo