文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>String类型中的equals和==的使用

String类型中的equals和==的使用

时间:2010-09-16  来源:JavaByJun

一、object超类中的equals和==的使用

equals比较的是两个对象的引用指向的地址是否相等(没被重写前)

== 比较的也是两个对象的引用的地址是否相等,并非其内容


Person2 p1 = new Person2("JUN", 25);

Person2 p2 = new Person2("JUN", 25);

Person2 p3 = p1;//表示p1的另一个名称是p3而已

System.out.println(p1.equals(p2));

System.out.println(p1.equals(p3));

System.out.println("p1 == p2:"+ (p1 == p2));

System.out.println("p1 == p3:"+(p1 == p3));

运行的结果为:

false

true

p1 == p2:false

p1 == p3:true

在object类下即equals方法还没有被重写前,equals和==比较的都是两个对象的引用的地址是否一样。而equals方法是可以被重写的,可以重写成判断两个对象的引用的内容是否相等。

重写equals方法:


public boolean equals(Object obj) {
                if( obj != null){
                        if( obj instanceof Teacher){
                Teacher t =(Teacher)obj;
                if(t.name.equals(this.name) && t.age == this.age){
                    return true;
                }else{
                    return false;
                }
            }else{
                return false;
            }
        }else{
            return false;
        }
    }

通过重写后的equals方法比较的是两个对象的引用的内容是否相等,而比较两个对象引用的地址是否相等仍然可以用==进行比较。

二、String类型中的equals方法和==的使用

 1、有2种办法可以去创建String的对象

1)String str= new String(“JUN”);(通过new构造器的方法)

2)String str2 = “JUN”;(通过普通语法)


String str = “JUN”;

String str2 = “JUN;

System.out.println(str == str2); 

     程序在运行的时候会创建一个字符串缓冲池当使用 str2 = "JUN" 这样的表达是创建字符串的时候,程序首先会在这个String缓冲池中寻找相同值的对象,在第一个程序中,str1先被放到了池中,所以在str2被创建的时候,程序找到了具有相同值的 s1, 将s2引用s1所引用的对象"JUN"。(str和str2由于内容相同,那么都是指向同一个地址)

     所以,比较的是2个对象的栈的地址是否一样,内容是存放在栈的空间里面去,只要内容相等,那么栈的空间就相等,结果为true。

String str3 = new String(“JUN”);

String str4 = new String(“JUN”);

System.out.println(str3 == str4);

通过new构建字创建的新对象,是直接告诉程序要新的对象,而不是指向已存在的,值相同但是地址不相同。

所以,比较的是2个对象的堆的地址是否一样,内容eric是分别存放在str3和str4的引用里面去,相当于堆的地址空间。结果为false。


       String str5 = “JUN”;

       String str6 = new String(“JUN”);
       System.out.println(str5 == str6);

一个是存放在栈的空间,一个是存放在堆的空间,结果为false


在String类型中使用equals方法进行比较的都是比较内容是否相等,而 == 比较的是对象内容还是地址则要看其对象的创建方法,要是普通方法创建的就比较的是内容,要是通过new构造器创建的则是比较器对象的地址。




相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载