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 基础类型和包装类运算时,包装类会拆包,所以就是两个值运算
#7 btye,short,int,long运算时,都会向上转型到同一类型运算
#8 equals()比较是先比较类型在比较值,类型不一样所以为false
分享到:
2014-06-14 21:28
浏览 2176
评论