美文网首页
Java中equal和==的区别

Java中equal和==的区别

作者: 七个榴莲 | 来源:发表于2018-04-18 09:39 被阅读0次

    大家先来做个题目,以下看下自己能不能作对。

    
    public class Test1{
        public static void main(String args[]){
                String a="1234";
                String b="1234";
                String c = new String("1234");
                System.out.println(a==b);
                System.out.println(a==c);
                System.out.println(a.equals(c));
        }
    }
    

    正确答案是答案是:1.true 2.false 3.true
    下面我来分析下过程:
    ①第一次String a="1234"时,会在常量池中创建一个常量1234,String b=1234时,常量 池中已经有了该常量,所以直接取,a和b的地址一样,所以地址值相等;
    ②String c = new String("1234")重新new了对象,在堆内存中开辟了新的空间,所以地址值不相等,
    ③String 类中重写的 equals 方法,所以只比较字符串内容 , 不比较地址值所以为true
    (但在一些类库当中这个方法 被重写 了,如 String,Integer,Date 在这些类当中equals有其自身的实现,而不再是比较类在堆内存中的存放地址了。)

    最后我再总结下equals()与==的区别:
    ①对于==号来说,如果是作用于基本数据类型的变量,比较的是他们的值是否相等;
    如果是作用于引用类型的变量,是判断两个对象内存地址是不是相等。

    ②对于equals()来说,如果没有重写equals()办法,等价于通过“==号”比较这两个对象。
    如果重写equals()办法,作用是比较内容是否相同。如果内容相等,则返回true。
    (如String,Data中的这个方法重写了,作用比较内容是否相同。)

    相关文章

      网友评论

          本文标题:Java中equal和==的区别

          本文链接:https://www.haomeiwen.com/subject/izamkftx.html