`

Java中的equals与==使用与区别

阅读更多

在项目中,我们经常要比较两个对象和值是否相等,所以经常会用到==与equals的比较,因此弄清楚两者区别,非常必要,下面总结一下两种用法与区别:

        简单的来说,==与equals区别主要是在对象比较使用上,==比较的对象既要值相同,同时内存地址也有要相同,equals只要值相等就可以了;但是在进行String类型对象比较是要特别注意,必须要理解比较的两个String对象是否是两个不同对象还是相同的对象;例如:

  例子1:

public class TestString { 
    public static void main(String[] args) { 
        String s1 = "test1"; 
        String s2 = "test1"; 
        if (s1 == s2) 
            System.out.println("s1 == s2"); 
        else 
            System.out.println("s1 != s2"); 
    } 
} 

 

输出的结果是:s1 == s2

 

 例子2:

public class TestString { 
    public static void main(String[] args) { 
        String s1 = "test1"; 
        String s2 = new String("test1"); 
        if (s1 == s2) 
            System.out.println("s1 == s2"); 
        else 
            System.out.println("s1 != s2"); 
        if (s1.equals(s2)) 
            System.out.println("s1 equals s2"); 
        else 
            System.out.println("s1 not equals s2"); 
    } 
} 

 

输出结果是:

       s1 != s2
       s1 equals s2

分析:在例子1中因为s1与S2都指向一个引用,所以它们在内存中占用一个内存地址,==比较就是所谓的对象既要值相同,同时内存地址也有要相同;例子2中,由于s2使用了new,在内存中开辟了一个新的内存空来存储s2对象,所以,在例子2中出现了两个String类型的test1对象,所以出现了例子2的结果;

总结:

    在对String类型对象比较是要特别注意,顺便提下Java中String的生成机制,Java中程序在运行的时候会创建一个字符串缓冲池 在例子1中当使用 s2 = "test1" 这样的表达式创建字符串的时候,程序首先会 在这个String缓冲池中寻找相同值的对象,在第一个程序中,s1先被 放到了池中,所以在s2被创建的时候,程序找到了具有相同值的 s1 将 s2 引用 s1 所引用的对象"Monday"

第二段程序中,使用了 new 操作符,他明白的告诉程序: “我要一个新的!不要旧的!”与是一个新的"test1"String对象被创 建在内存中。他们的值相同,但是位置不同,所以出现了例子2的情况。

分享到:
评论

相关推荐

    java中equals和==的区别

    Java 中 equals 和 == 的区别 Java 中的 equals 和 == 是两个不同的概念,很多开发者容易混淆它们。理解这两个概念的区别是非常重要的,因为它们对编程的正确性和性能都有很大的影响。 首先,我们需要了解 Java ...

    java中equals和==的区别.doc

    Java 中 equals 和 == 的区别 Java 中的 equals 和 == 是两个不同的运算符,它们之间的区别是非常重要的。 首先,我们需要了解 Java 中的内存模型。在 Java 中,变量可以分为两种:基本类型(primitive type)和...

    java 资料 equals 与== 的区别

    Java 中的equals和==的区别 Java 是一种面向对象的编程语言,其中有两种数据类型:基本数据类型和引用数据类型。基本数据类型包括整数类型、浮点数类型、字符类型、布尔类型等,共有八种;而引用数据类型则包括 ...

    Java基础复习(内附String中equals与==区别的分析)

    本篇复习将重点讨论String类中的`equals()`方法和`==`运算符的区别,这对于理解对象比较和字符串操作至关重要。 首先,`==`运算符在Java中用于比较基本类型(如int、char)的值,而在比较对象时,它实际上是检查两...

    Java 中equals和==的区别.doc

    Java 中equals和==的区别

    java中equals和==的区别.docx

    Java 中 equals 和 == 的区别 Java 中的 equals 和 == 是两个常用的操作符,经常用于比较对象或变量的值。然而,许多开发者不知道它们之间的区别,或者误用它们,导致程序出错。下面我们将详细解释 equals 和 == 的...

    【Java面试题】equals与==的区别

    【Java面试题】equals与==的区别

    java中equals和==的区别-5页.pdf

    java中equals和==的区别-5页.pdf

    java中equals和==的区别.pdf

    Java中equals和==的区别 Java是一门面向对象的编程语言,它提供了多种运算符和方法来比较对象和变量。在Java中,比较两个对象是否相等时,经常使用到的运算符有"=="和"equals"。虽然两者都可以用于比较,但它们有着...

    java中equals和==的区别.

    在Java编程语言中,`equals()`方法和`==`运算符是用于比较对象的两种不同方式,它们在处理不同类型的数据时有不同的行为。了解这两者的区别对于编写正确的代码至关重要。 `==`运算符: 1. `==`用于比较基本类型的...

    Java中equals与==的用法和区别

    Java中equals与==的用法和区别 Java 中的 equals 与 == 是两个常用的比较操作符,但是它们的用法和区别却非常重要。理解它们的差异是编写高效、正确的 Java 程序的关键。 什么是 == ? 在 Java 中,== 是一个比较...

    Java中的==和equals区别

    ### Java中的`==`与`equals`方法的区别详解 在Java编程中,比较对象的相等性是一个常见的需求,但很多初学者对于`==`运算符与`equals`方法的区别容易混淆。本文将深入探讨两者之间的差异,以及它们在不同场景下的...

Global site tag (gtag.js) - Google Analytics