Java初学者了解"=="与equals的区别

这篇文章主要介绍了Java初学者了解"=="与equals的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

1.基本数据类型当中,"=="比较的是两个变量的值

 int a=5;
 int b=4;
 int c=5;
 System.out.println(a==b);//false
 System.out.println(a==c);//true

2.引用数据类型当中,"=="比较的是两个对象在内存里是不是同一个对象,就是说在内存里的存储位置(地址,引用)是否一致。(这里拿String举例)

 String str1 = new String("Hello");
 String str2 = new String("Hello");
 String str3 = new String("World");
 System.out.println(str1 == str2);// false,new出来的对象在堆当中,属于两个对象
 System.out.println(str1 == str3);// false,同上

3.两个String对象的存储值是一样的,但有可能在内存里存储在不同的地方。

String str1="Hello";
String str2="Hello";
String str3 = new String("Hello");
//对String对象进行==比较
System.out.println(str1==str2);//true,str1和str2在方法区的常量池当中,属于同一个引用
System.out.println(str1==str3);//false,str3在堆当中,与str1存储位置不一致
System.out.println(str2==str3);//false,同上

4."=="比较的是引用(内存里的存储位置),而String类中equals()方法比较的是字符串的内容。

String str1="Hello";
String str2="Hello";
String str3="World";
String str4 = new String("Hello");
String str5 = new String("World");

System.out.println(str1.equals(str2));//true,内容相同
System.out.println(str1.equals(str3));//false,内容不同
System.out.println(str1.equals(str4));//true,内容相同
System.out.println(str1.equals(str5));//false,内容不同

5.public boolean equals(Object obj)这个方法是由Object对象提供的,可以由子类进行重写。

默认的实现只有当对象和自身进行比较时才会返回true,这个时候和"=="是等价的。下面是Object类下的equals()方法:

 public boolean equals(Object obj) {
     return (this == obj);
   }

而String类继承至Object类,对equals()方法进行了方法重写,下面是String类下的equals方法():

public boolean equals(Object anObject) {
    if (this == anObject) {
      return true;//同一个引用,说明是同一对象,字符序列内容一定相同
    }
    if (anObject instanceof String) {//判断是不是String对象
      String anotherString = (String) anObject;//下转型,转换为String字符串
      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;
  }

另外,String,BitSet,Date,和File都对equals方法进行了重写,对两个String对象而言,值相等意味着它们包含同样的字符序列,对于基本类型的包装类来说;值相等意味着对应的基本类型的值一样。

7.总结:

(1)."=="如果比较的是对象是基本数据类型,则比较的是值是否相等;"=="如果比较的对象是引用数据类型,则比较的是引用,即比较在内存当中的存储位置(地址)是否相同,也可以理解为是否是同一个对象(a is a)。

(2).equals()方法默认比较的是是否为同一对象(子类没有重写父类equals方法),String类的equals()方法比较的是内容(该类对equals()方法进行了重写,即a like a)是否相同,自定义类也可重写equals()方法,这里不在赘述。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 浅谈java 中equals和==的区别

    本文实例为大家分享了java 中equals和==的区别的具体代码,供大家参考,具体内容如下 java9举例代码: String str1 = "abc"; String str2 = "abc"; String str3 = new String("abc"); String str4 = new String("abc"); 当: str1 == str2    输出:true 当:str1.equals(str2); 输

  • java中equals和等号(==)的区别浅谈

    java中的数据类型,可分为两类:1.基本数据类型,也称原始数据类型.byte,short,char,int,long,float,double,boolean   他们之间的比较,应用双等号(==),比较的是他们的值. 2.复合数据类型(类)   当他们用(==)进行比较的时候,比较的是他们在内存中的存放地址,所以,除非是同一个new出来的对象,他们的比较后的结果为true,否则比较后结果为false.JAVA当中所有的类都是继承于Object这个基类的,在Object中的基类中定义了一个eq

  • java String类常量池分析及"equals"和"==”区别详细介绍

    java "equals"和"=="异同 首先简单说一下"equal"和"==" ==操作对于基本数据类型比较的是两个变量的值是否相等, 对于引用型变量表示的是两个变量在堆中存储的地址是否相同, 即栈中的内容是否相同 equals操作表示的两个变量是否是对同一个对象的引用, 即堆中的内容是否相同. 综上,==比较的是2个对象的地址,而equals比较的是2个对象的内容. 再简单介绍一下String类 String类 又称作不可

  • java equals和==的区别详解

    大概说equals和==都比较的是什么: 1. boolean tem = a == b; 首先==比较的肯定是地址,从堆栈的角度说也就是说==比较的是栈上面的内容.因为栈是用来存放地址或是java中八大基本类型中自动变量的字面值(自动变量就是用int a = 1;这种形式来定义的变量).如果是自动变量比较值的话肯定是用==来比较,因为equals()是一个方法,所以必须由对象调用才可以用于比较.而自动变量既不是类的实例也不是类的引用所以不能用equals()方法. 2.boolean tem

  • Java中比较运算符compareTo()、equals()与==的区别及应用总结

    前言 比较运算符用于判断两个数据的大小,例如:大于.等于.不等于.比较的结果是一个布尔值( true 或 false ). Java 中常用的比较运算符如下表所示: 本文主要给大家介绍了关于Java比较运算符compareTo().equals()与==区别及应用的相关内容,下面话不多说了,来一起看看详细的介绍吧 1.== 和 equals的区别: ==主要是两个变量值的比较,返回值为true 或者是false.对于普通变量,如:int a=10; int  b= 10; a==b,返回为 tr

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

    背景介绍 == 比较的是变量(栈)内存中存放的对象的(堆)内存地址,用来判断两个对象的地址是否相同,即是否是指相同一个对象.比较的是真正意义上的指针操作. equals用来比较的是两个对象的内容是否相等,由于所有的类都是继承自java.lang.Object类的,所以适用于所有对象,如果没有对该方法进行覆盖的话,调用的仍然是Object类中的方法,而Object中的equals方法返回的却是==的判断. java中的数据类型可以分为两类: 基本数据类型 byte,short,char,int,l

  • java equals和=,==的区别详细介绍

    Java中equals和==的区别 java中的数据类型,可分为两类: 1.基本数据类型,也称原始数据类型.byte,short,char,int,long,float,double,boolean 他们之间的比较,应用双等号(==),比较的是他们的值. 2.复合数据类型(类) 当他们用(==)进行比较的时候,比较的是他们在内存中的存放地址,所以,除非是同一个new出来的对象,他们的比较后的结果为true,否则比较后结果为false. JAVA当中所有的类都是继承于Object这个基类的,在Ob

  • Java中==与equals的区别小结

    public class Compare { /** * == 与 equals()区别 */ public static void main(String[] args) { String s1 = new String("Hello,World!"); //创建两个String型对象引用; String s2 = new String("Hello,World!"); String s3 = s1; //将s1对象引用赋予s3 System.out.printl

  • Java初学者了解"=="与equals的区别

    这篇文章主要介绍了Java初学者了解"=="与equals的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1.基本数据类型当中,"=="比较的是两个变量的值 int a=5; int b=4; int c=5; System.out.println(a==b);//false System.out.println(a==c);//true 2.引用数据类型当中,"=="比较的是两个对象在内

  • Java详细解析==和equals的区别

    目录 1.== 解析 2.equals 方法解析 3.equals方法具有以下特性 1.== 解析 == 常用于相同的基本数据类型之间的比较,也可用于相同类型的对象之间的比较: 如果 == 比较的是基本数据类型,那么比较的是两个基本数据类型的值是否相等: 如果 == 是比较的两个对象,那么比较的是两个对象的引用,那么就是比较两个对象的引用是否相等,也就是判断两个对象是否指向了同一块内存区域: 2.equals 方法解析 equals 方法主要用于两个对象之间,检测一个对象是否等于另一个对象. 我

  • 详解Java中“==”与equals()的区别

    Java中"=="与equals()的区别 对于关系操作符"==",<Java编程思想>中是这样描述的:"关系操作符生成的是一个boolean结果,它们计算的是操作数的值之间的关系".这里的操作数的"值"值得我们注意.对于8种基本数据类型(boolean,byte,char,short,int,float,double,long),它们的变量直接存储的就是"值".所以,我们用"==&q

  • Java中Object.equals和String.equals的区别详解

    前言 Java中的堆和常量池的区别是什么呢?Object.equals与String.equals的区别呢?下面让我妈通过一个小示例让你明白它- 1.基础知识 Java的存储空间:寄存器.栈.堆.静态存储区.常量存储区(常量池).其他存储位置. 此处重点介绍堆和常量存储区: 堆:存储new的对象; 常量池:用来存储final static.String的常量. 2.Object.equals与String.equals的区别 Object.equals(==):比较内存地址: String.eq

  • 浅谈java中BigDecimal的equals与compareTo的区别

    这两天在处理支付金额校验的时候出现了点问题,有个金额比较我用了BigDecimal的equals方法来比较两个金额是否相等,结果导致金额比较出现错误(比如3.0与3.00的比较等). [注:以下所讲都是以sun jdk 1.4.2版本为例,其他版本实现未必一致,请忽略] 首先看一下BigDecimal的equals方法: public boolean equals(Object x){ if (!(x instanceof BigDecimal)) return false; BigDecima

  • Java中==运算符与equals方法的区别及intern方法详解

    Java中==运算符与equals方法的区别及intern方法详解 1.  ==运算符与equals()方法 2. hashCode()方法的应用 3. intern()方法 /* Come from xixifeng.com Author: 习习风(StellAah) */ public class AboutString2 { public static void main(String[]arsgs) { String myName="xixifeng.com"; String

  • Java==和equals的区别总结

    在 Java 中 == 和 equals 的区别,感觉只有很少的人能才完全说正确. 常见的错误回答就是:== 基础类型对比的是值是否相同,引用类型对比的是引用是否相同:而 equals 则是比较的值是否相同. 至于为什么说它是错的,看完本文对 == 和 equals 的解读,你就知道了. 1.== 解读 对于基本类型和引用类型 == 的作用效果是不同的,如下所示: 基本类型:比较的是值是否相同:引用类型:比较的是引用是否相同: 代码示例: String x = "string"; St

  • java中“==“和equals()的区别详解

    今天我们探讨一下Java中"=="与equals()的区别 ==:关系运算符 在基本数据类型中比较两个值的内容是否相等       在引用类型型中比较的是两个对象的地址是否相等 equals()是Object类中的方法 1.基本数据类型无法使用equals()方法 2.在引用类型中若是没有重写Object类时,则默认使用Object类的equals方法,则仍然 利用"=="比较两个对象的内存地址,若是重写Object类的equals方法,则调用子类重写后    的方

  • 详解Java中==和equals()的区别

    目录 1. == 1.1 基本数据类型 1.2 引用数据类型 1.3 小结 2. equals 3. 总结 1. == == 是运算符,用来判断两个值是否相等,==可以使用在基本数据类型变量和引用数据类型变量中 1.1 基本数据类型 Java基本数据类型共有八种,可以分为三类 字符类型char 布尔类型boolean 数值类型byte.short.int.long.float.double 这里有个例外,boolean不参与数值运算 int a1 = 10; int a2 = 10; Syste

  • Java初学者问题图解(动力节点Java学院整理)

    1. String对象不可改变的特性 下图显示了如下代码运行的过程: String s = "abcd"; s = s.concat("ef"); 图1 2. equals()与hashCode()方法协作约定 HashCode(哈希编码,散列码)是设计了用来提高性能的. equals()与hashCode()方法之间的关系可以概括为: 1.如果两个对象相等(equal),那么必须拥有相同的哈希码(hash code) 2.即使两个对象有相同的哈希值(hash co

随机推荐