A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

---------------------- <a target="blank">ASP.Net+Unity开发</a>、<a target="blank">.Net培训</a>、期待与您交流! ----------------------
public class Test
{
  public static void main(String[] args){
          String a1 = new String("hello");
          String a2 = new String("hello");
          System.out.println(a1==a2);
          System.out.println(a1.equals(a2));
}
}
结果是:a1==a2是false,因为==比较的是二者的地址值,而他们是两个不同的地址值;
          a1.equals(a2)接ture,因为equals比较的是对象的内容,即二者同为hello,所以结果为真!
夯实基础,弄懂每个小细节真的很重要!
---------------------- <a target="blank">ASP.Net+Unity开发</a>、<a target="blank">.Net培训</a>、期待与您交流! ----------------------

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

4 个回复

倒序浏览
万分感谢!!!!!!!
回复 使用道具 举报
楼主说的很好,
  1. public class Testt
  2. {
  3.   public static void main(String[] args){
  4.           String a1 = new String("hello");
  5.           String a2 = new String("hello");
  6.           String a3 = new String();
  7.           a3 = a1;//赋值语句就是把a1的地址赋给a3.
  8.           System.out.println(a1==a2);
  9.           System.out.println(a1.equals(a2));
  10.           System.out.println(a3==a1);//因此 这里显示为true
  11.           System.out.println(a3.equals(a2));
  12. }
  13. }
复制代码

这样更能看出 ==的机制

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
"=="运算符专门用来比较两个变量的值是否相等,也就是比较两个变量缩所对应的内存中所存储的值是否相等。要比较两个基本数据类型的数据或者两个引用变量是否相等。只能用"==";
如果一个变量指向的数据类型是对象类型的,那么这就涉及到两个内存,对象本身一块内存(堆内存),变量一块内存(栈内存),例如Object obj = new Object();变量obj对应一块内存,new Object()占一块内存,此时obj对应内存中所存储的数据就是对象所占内存的首地址。  对于指向对象的变量,如果要比较两个变量是否指向同一个对象。即比较两个变量对应内存中所存储的数值是否相等。这时就要用"=="。
equals方法是比较两个独立对象的内容是否相同,例如下面代码:
String a = new String("qingmulang");
String b = new String("qingmulang");
两条new语句创建了两个对象,a,b两个变量分别指向其中一个对象。这是两个不同的对象,他们的首地址是不同的,即a和b所存储的数值是不相同的。所以:
reurn a==b;------>false;
return a.equals(b)---->true;
  如果一个类没有自己定义一个equals方法,那么默认的equa方式是从Object继承来的就是"=="操作费,也就是比较两个变量是否指向同一个对象,这时候equals和"=="结果是相同的,如果比较两个独立对象结果总是返回false。
Objec类中equals方法如下
boolean equals(Object o)
{
    return this == o;
}

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
就拿你这个列子来简单说明一下吧
String a1 = new String("hello");
  String a2 = new String("hello");
a1,a2分别存储了两个不同的内存首地址,然而==是要比较a1,a2的数值是否相等,很显然,String new了连个完全不同的对象,在内存中的首地址当然也是不一样的,所以a1==a2返回的是false       equals比较的是对象中存储的内容是否相等,所以a1.equals返回的是true;

        

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马