java 根本数据类型 ==和equals()比较
java 基本数据类型 ==和equals()比较
1.基本类型的存储
Java 8种基本类型都是存储在堆栈中,例:int i = 1;String str = "hello world";也是存储在堆栈中。
new基本类型的包装器类型和new String()都是存储在堆内存中。例Integer i = new Integer(1);String str = new String("hello world");
2.==和equels()比较的含义
1.==是比较对象的内存地址,基本类型就是比较值
2.java对象的equals()方法都是继承Object.equals(Object o)方法的。比较的内容其实就是使用了“==”比较对象内存地址。
java8种基本类型包装器类和String类都重写了equals()方法,先比较类型在比较值,例如Long.equals(Object obj)
3.实例==和equels()比较
#1 new两个Integer对象,分配内存在堆中,两个地址块不同
#2 Integer integer3_3 = 3;java编译后的代码为
查看java Integer.valueOf(int)源码
#3 基础类型和包装类运算时,包装类会拆包,所以就是两个值运算
#4 btye,short,int,long运算时,都会向上转型到同一类型运算
#8 equals()比较是先比较类型在比较值,类型不一样所以为false
1.基本类型的存储
Java 8种基本类型都是存储在堆栈中,例:int i = 1;String str = "hello world";也是存储在堆栈中。
new基本类型的包装器类型和new String()都是存储在堆内存中。例Integer i = new Integer(1);String str = new String("hello world");
2.==和equels()比较的含义
1.==是比较对象的内存地址,基本类型就是比较值
2.java对象的equals()方法都是继承Object.equals(Object o)方法的。比较的内容其实就是使用了“==”比较对象内存地址。
public boolean equals(Object obj) { return (this == obj); }
java8种基本类型包装器类和String类都重写了equals()方法,先比较类型在比较值,例如Long.equals(Object obj)
public boolean equals(Object obj) { if (obj instanceof Long) { return value == ((Long)obj).longValue(); } return false; }
3.实例==和equels()比较
int int3 = 3; Integer integer3 = new Integer(3); Integer integer3_2 = new Integer(3); Integer integer3_3 = 3; Integer integer3_4 = 3; Integer integer321 = 321; Integer integer321_2 = 321; int int321 = 321; int int321_2 = 321; Long long3 = 3l; System.out.println(integer3==integer3_2); //false #1 System.out.println(integer3_3==integer3_4); //true #2 System.out.println(integer3==int3); //true #3 System.out.println(integer3_3.equals(integer3_4)); //true #4 System.out.println(integer321==integer321_2); //false #5 System.out.println(int321==int321_2); //true #6 System.out.println(long3==int3); //true #7 System.out.println(long3.equals(int3)); //false #8
#1 new两个Integer对象,分配内存在堆中,两个地址块不同
#2 Integer integer3_3 = 3;java编译后的代码为
Integer integer3_3 = Integer.valueOf(3);
查看java Integer.valueOf(int)源码
public static Integer valueOf(int i) { assert IntegerCache.high >= 127; if (i >= IntegerCache.low && i <= IntegerCache.high) return IntegerCache.cache[i + (-IntegerCache.low)]; return new Integer(i); }原来-128<=int<=127的值java栈中有缓存都指向同一个地址,不在这个范围内的int值都是new一个新的Integer,所以#2为true,#5为false
#3 基础类型和包装类运算时,包装类会拆包,所以就是两个值运算
#4 btye,short,int,long运算时,都会向上转型到同一类型运算
#8 equals()比较是先比较类型在比较值,类型不一样所以为false