java类型比较_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)方法的。比较的内容其实就是使用了“==”比较对象内存地址。

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

分享到:

18e900b8666ce6f233d25ec02f95ee59.png

72dd548719f0ace4d5f9bca64e1d7715.png

2014-06-14 21:28

浏览 2176

评论

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值