`

java中equals与==的区别

    博客分类:
  • Java
阅读更多

equals 方法(是String类从它的超类Object中继承的)被用来检测两个对象是否相等,即两个对象的内容是否相等。

 java语言的本意来说:如果没有重写(override)
新类的equals(),则该方法和 == 操作符一样在两个变量指向同一对象时返回真,(即比较的是引用而不是内容)
但是java推荐的是使用equals()方法来判断两个对象的内容是否一样.比如String,Date,File类就已经通过覆盖equals()方法来比较对象内容而不是引用

==用于比较引用和比较基本数据类型时具有不同的功能:
比较基本数据类型,如果两个值相同,则结果为true
而在比较引用时,如果引用指向内存中的同一对象,结果为true

 

JAVA的对象存储机制里,new出来的一定是对象,而对象在内存中的存贮位置在Heap(堆)中,而基本类型在程序中出现的比较频繁(注:JAVA中的基本类型为8中,分别是:boolean,char,byte,short,int,long,float,double),所以通过new产生这些对象而将其放入在heap中效率反而不高,所以JAVA直接采取C/C++的方式,也就是不以new来分配其空间,而是产生一种所谓的“automatic”变量(不在是reference的形式),来解决效率的问题,此类变量直接放数据值,并且置于stack(栈)中,因为stack在空间的分配和释放上,效率要好的多。而恰恰是这种在内存中位置的不同,在stack中为基本类型变量分配空间时,如果stack中有一样的数据时,将不在创建新的数据,所以导致这个时候比较的两个基本类型值时,即使用==也是true。

例1:

java 代码
  1. public class Test {   
  2.   
  3.     public static void main(String[] args) {   
  4.   
  5.         float f=4.2F;    
  6.         Float g=new Float(4.2F);    
  7.         Double d=new Double(4.2);   
  8.   
  9.         System.out.println(f==g); //----输出true   
  10.         System.out.println(d==f);//-------输出false   
  11.         System.out.println(d.equals(f));//-------输出false   
  12.         System.out.println(d.equals(g));//-------输出false   
  13.         System.out.println(g.equals(4.2));//-------输出false   
  14.   
  15.         System.out.println(4.2==d); //----输出true   
  16.         System.out.println(4.2f==g);//----输出true   
  17.         System.out.println(4.2f==d); //-------输出false   
  18.            
  19.            
  20.         String s="aaa";   
  21.         String d1="aaa";   
  22.         System.out.println(s==d1);   //----输出true   
  23.   
  24.   
  25.         String s1=new String("aaa");   
  26.         String d11="aaa";   
  27.         System.out.println(s1==d11);   //-------输出false   
  28.   
  29.   
  30.         s1 = new String("sony");  //创建的是字符串对象   
  31.         s1.equals("sony"); //返回true   
  32.         System.out.println(s1 == "sony");  //返回false   
  33.         //如果   
  34.         s1 = "sony";   
  35.         System.out.println(s1 == "sony"); //返回true   
  36.   
  37.     }   
  38.   
  39. }  

例2:

java 代码
  1. public class MyClass {   
  2.   
  3.     /**  
  4.      * @param args  
  5.      */  
  6.     static String s1 = "I am unique!";   
  7.   
  8.     public static void main(String[] args) {   
  9.         // TODO Auto-generated method stub   
  10.   
  11.         String s2 = "I am unique!";   
  12.         String s3 = new String(s1);               
  13.         System.out.println(s1 == s2);           //----输出true        
  14.         System.out.println(s1.equals(s2));      //----输出true       
  15.         System.out.println(s3 == s1);             //-------输出false   
  16.         System.out.println(s3.equals(s1));           //----输出true   
  17.         
  18.   
  19.     }   
  20.   
  21. }  


 



 


分享到:
评论

相关推荐

    java中equals和==的区别

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

    java中equals和==的区别.doc

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

    java 资料 equals 与== 的区别

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

    Java 中equals和==的区别.doc

    Java 中equals和==的区别

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

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

    java中equals和==的区别.docx

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

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

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

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

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

    java中equals和==的区别.pdf

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

    java中equals和==的区别.

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

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

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

    java中equals和==的比较.pdf

    总结,理解`equals()`和`==`的区别是Java编程中的关键知识点。在使用时,根据需要比较的是对象的引用还是内容,选择适当的操作符或方法。对于String类,由于其特殊的常量池机制,`==` 和 `equals()` 的行为可能与...

Global site tag (gtag.js) - Google Analytics