【Java笔记】equals和==

我对于这个知识点一直是很模糊的,今天弄清楚了,就记下来,免得以后又忘了。

下面就上Test代码,我来说一下我的理解:

	public static void main(String[] args) {
//第一轮
		int a = 1;
		int b = 1;
		System.out.println(a==b);
		System.out.println("--------");
//第二轮
		String str = "abc";
		String str1 = new String("abc");
		String str2 = "abc";
		System.out.println(str1==str2);
		System.out.println(str1.equals(str2));
		System.out.println("--------");
//第三轮
		str1 = str;
		str2 = str;
		System.out.println(str1==str2);
		System.out.println(str1.equals(str2));

	}

这里是输出

第一轮输出的部分:

用"=="比较两个int常量。两个常量都赋值为整数1,比较结果是true。

原因是"=="符号比较基本类型数据时比较的是两个变量的值,值相同就返回true。

第二轮输出的部分:

当"=="符号作用的对象是引用数据类型时,比较的的是两个变量指向的地址,地址相同则返回true,不同返回false。

变量str1使用 new String("abc")进行赋值,结果是str1保存在栈中,指向堆中 new String()的地址;

变量str2直接赋值为"abc",结果是str2指向常量池中"abc"的地址,即指向方法区中的地址。

(堆和方法区的存在源于java的内存分配机制)

所以使用"=="比较时,返回的是false。

因为String类重写了equals()方法,让equals()方法仅仅比较指向的对象所存储的值是否相同。所以使用equals()比较时返回的时true

第三轮输出的部分:

将变量str1和变量str2都指向变量str,让它们指向的地址相同。所以不管是使用"=="还是equals()都会返回true。

总结:

使用"=="进行比较:

1. 若比较的对象是基本数据类型,那么就比较值的大小

2. 若比较的对象是引用类型时,就比较这两个对象所指向的地址是否相同

使用equals进行比较:注意:基本数据类型的变量没有equals方法

1. 若重写了equals方法(String类重写了equals()),那么就比较两个变量的值

2. 若没重写equals方法,那么还是比较两个变量所指向的地址

 

谢谢各位的浏览。如果有理解错误的地方,希望可以提出来。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值