【黑马程序员】equals和==的区别

——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-

首先, == 是一个运算符。而Equals则是String对象的方法。
其次,equals是比较值,==是比较地址(在比较基本数据类型的时候,==比较的也是值,本文只讨论比较引用数据类型),举例如下:

String aa=new String("a");
String aa1=new String("a");
System.out.println(aa==aa1);
System.out.println(aa.equals(aa1));

以上输出结果为flase,true。
aa,aa1值一样但地址不一样

String aa2="1";
String aa3="1";
System.out.println(aa2==aa3);
System.out.println(aa2.equals(aa3));

以上输出结果为true true ,因为aa2 aa3指向同一个”1”,所以地址、值都相同

那么问题来了,此时为什么aa2和aa3都指向同一个”1”而不是new一个String呢?是因为Java中有一个叫字符串缓冲池的东西,程序在运行的时候会创建一个字符串缓冲池。

当使用String aa2 = “1” 这样的表达式创建字符串的时候,程序首先会在这个String缓冲池中寻找相同值的对象,在第二个程序中,aa2先被放到了池中,所以在aa3被创建的时候,程序找到了具有相同值的aa2,将aa3指向aa2所引用的对象”1”

第一段程序中,使用了 new 操作符,他明白的告诉程序内存,要创建个新的,于是一个新的”a”String对象被创建在内存中。他们的值相同,但是位置不同,算是资源浪费吧!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值