您的位置:首页 > 职场人生

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

2015-10-29 17:51 253 查看
——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对象被创建在内存中。他们的值相同,但是位置不同,算是资源浪费吧!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  string