`

equals与"=="的区别和理解

阅读更多

equals与==的区别:

equals用于检测两个对象的内容是否相等(即对中的内容是否相同)

==在用于比较基本数据类型时,两者值相同,比较结果为true

    在用于比较引用时,若引用指向内存中的同一对象,比较结果为true(==比较的是栈中的内容是否相同)

 

为了更清楚的了解它们的工作过程,先来看看equals的源码:

 public boolean equals(Object anObject) {
        if (this == anObject) {
            return true;
        }
        if (anObject instanceof String) {
            String anotherString = (String) anObject;
            int n = value.length;
            if (n == anotherString.value.length) {
                char v1[] = value;
                char v2[] = anotherString.value;
                int i = 0;
                while (n-- != 0) {
                    if (v1[i] != v2[i])
                            return false;
                    i++;
                }
                return true;
            }
        }
        return false;
    }

 可以看到,equals默认调用了“==”比较方法,在传入参数为String类时,重写了这个方法,进行字符的逐个比较。所以,equals可以用来比较字符串是否相同。

所以,equals具体的作用要看当前的那个类是如何实现重写父类中该方法的。如果没有重写该方法,那么它和==号等价。

下面测试两者的作用:

package test;

public class Test {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		String str1 = "world";// 直接赋值,该字符串放在常量池(在堆中)中
		String str2 = new String("world") ;	// 通过new赋值,新建了一个对象 
		String str3 = str2 ;	// 传递引用,str放在栈内存中 
		System.out.println("str1 == str2 : " + (str1==str2)) ;	
		System.out.println("str1 == str3 : " + (str1==str3)) ;	
		System.out.println("str2 == str3 : " + (str2==str3)) ;	
		System.out.println("======================================================");
		System.out.println("str1 equals str2 : " + (str1.equals(str2))) ;	
		System.out.println("str1 equals str3 : " + (str1.equals(str3))) ;	
		System.out.println("str2 equals str3 : " + (str2.equals(str3))) ;	

	}

}

 输出结果如下:

str1 == str2 : false 不是同一个对象,地址不同 str1 == str3 : false 不是同一个对象,地址不同 str2 == str3 : true 同一对象 ====================================================== str1 equals str2 : true str1 equals str3 : true str2 equals str3 : true

由于equals重写了比较方法,只比较两个字符串的值是否相同。

 String str = "World";中,str放在栈内存中,“World”放在堆内存中,str是一个指向“World”首地址的引用。

 

 

 

 

 

 

 

 

 

 

 

0
0
分享到:
评论

相关推荐

    java中equals和==的区别

    能够加强对java中equals与==区别的理解。

    Java解惑系列之一--equals和==之间究竟有什么区别

    equals与==的区别?equals和==有什么区别? Java解惑系列之一--equals和==之间究竟有什么区别 稍微学过一些java的同学都可能在网络上看到这样的一道题: 在java语言当中,equals和==之间究竟有什么区别? 而这道...

    java中equals和==的区别.

    通过例子详细解释java中equals和==区别。实例丰富,适合初学者,便于理解,

    深入理解equals和hashCode方法

    在Java中,equals和hashCode方法是Object中提供的两个方法,这两个方法对以后的学习有很大的帮助,本文就深度来去讲解这两个方法。下面小编带大家来一起学习吧

    java 经典面试题30道

    = =和equals有什么区别? 答: = =是操作符号,对于基本类型来说比较的是值,对于引用类型来说,比较的是引用,也可以理解为内存地址。而equals方法是属于超类Object的方法,其实默认情况下也是用==比较,只是很多类...

    java String 类的一些理解 关于==、equals、null

    在对字符串的相等判断,==判断的是地址是否相同,equal()判断的是字符值是否相同。大多数时候==跟equal()的结果都是相同的。

    java中如何区分==和equals

    主要介绍了java中如何区分==和equals,文中讲解的非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下

    Java中hashCode和equals方法的正确使用

    在这篇文章中,我将告诉大家我对hashCode和equals方法的理解。我将讨论他们的默认实现,以及如何正确的重写他们。我也将使用Apache Commons提供的工具包做一个实现。  hashCode()和equals()定义在Object类中,这...

    基于Java字符串 "==" 与 "equals" 的深入理解

    本篇文章是对Java中的字符串"=="与"equals"进行了详细的分析介绍,需要的朋友参考下

    Java的Object类讲解案例代码 equals()、hashCode()、finalize()、clone()、wait()

    本案例代码将详细展示Object类的使用方法,并提供一些实际场景下的案例,以帮助开发者更好地理解和运用这些方法。 这份案例代码适合以下人群: Java初学者:如果你是刚开始学习Java编程,那么Object类是一个重要的...

    Java初学者都必须理解的六大问题

     问题二:"=="和equals方法究竟有什么区别?  ==操作符专门用来比较变量的值是否相等。比较好理解的一点是:  int a=10;  int b=10;  则a==b将是true。  但不好理解的地方是:  String a=new ...

    java文档,方便理解

    对于理解java类有一些帮助,如java append方法,substring,还有“==”和equals的区别,最后还有说到一些关于正则表达式的介绍

    java六大必须理解的问题-来自网络少许有误(非常适合初学者).doc

    问题二:"=="和equals方法究竟有什么区别? ==操作符专门用来比较变量的值是否相等。比较好理解的一点是: int a=10; int b=10; 则a==b将是true。 但不好理解的地方是: String a=new String("foo"); String...

    java初学者必须理解的6大问题

    问题一:我声明了什么!  String s = "Hello world!";  许多人都做过这样的事情,但是,我们到底... 问题二:"=="和equals方法究竟有什么区别?  ==操作符专门用来比较变量的值是否相等。比较好理解的一点是:

    Object 类中的equals()方法.pptx

    理解equals()方法的功能; 清楚Object类中的equals()方法原型 了解String类中的equals()方法原型 会模仿写Person类、Student类及Teacher类中的equals()方法; 会根据类的实例相等比较的性质写类的equals()方法。;...

    调高C#编程的50个基本技巧

    1.总是用属性 (Property) 来代替可访问的数据成员 2.在 readonly 和 const 之间,优先使用 readonly 3....理解 ReferenceEquals, static Equals, instance Equals 和 比较运算符(==)之间的关系

    学会这些java面试题让你吊打面试官

    学会这些java面试题让你吊打面试官!面试前看看,让你充满自信,不再惧怕面试官各种刁难。1.Java中内存管理及各区域内存储数据的生命周期? 2.JVM堆内存的分代管理以及垃圾回收流程?...10.==和equals的区别?。。。。。。

    涵盖了90%以上的面试题

    "=="和equals方法究竟有什么区别 String,StringBuffer,StringBuilder有什么区别 java中的数组是不是对象 数组初始化的方式有哪几种 length属性和length()方法有什么区别 finally块中的代码什么时候被执行 Java中的...

    Java面试题.docx

    1、java中==和equals和hashCode的区别 2、int与integer的区别 3、String、StringBuffer、StringBuilder区别 4、什么是内部类?内部类的作用 5、进程和线程的区别 6、final,finally,finalize的区别 7、...

Global site tag (gtag.js) - Google Analytics