详解equals和==的区别

对于字符串变量:

1、如果使用的类重写了equals()方法,那么equals()比较的是字符串中包含的内容是否相同,否则equals()和==一样比较的是内存地址;

2、==始终比较的是两个变量的内存地址;

public class Test1 {
public static void main(String[] args) {
    String s1,s2,s3="abc",s4="abc";
    s1=new String("abc");
    s2=new String("abc");
    System.out.println(s1==s2);//false
    System.out.println(s3==s4);//true
     StringBuffer buf1 = new StringBuffer("a");
     StringBuffer buf2 = new StringBuffer("a");
     System.out.println(buf1.equals(buf2));//false,
     //因为StringBUffer没有重写Object的equals()方法
}
}

对于非字符串变量:

“==”和”equals”方法的作用是相同的都是用来比较其

对象在堆内存的首地址,即用来比较两个引用变量是否指向同一个对象。

另外:

1、 如果是基本类型比较,那么只能用==来比较,不能用equals,否则编译不能通过;

public class Test2 {
public static void main(String[] args)
{
int a = 5;
int b = 4;
int c = 5;
System.out.println(a == b);//结果是false
System.out.println(a == c);//结果是true
System.out.println(a.equals(c));//错误,编译不能通过
}
}

2、 对于基本类型的包装类型,比如Boolean、Character、Byte、Shot、Integer、Long、Float、Double等的引用变量,==是比较地址的,而equals是比较内容的。

public class Test2 {
public static void main(String[] args) {
    Integer n1 = new Integer(30);
    Integer n2 = new Integer(30);
    Integer n3 = new Integer(31);
    System.out.println(n1==n2);//false
    System.out.println(n1.equals(n2));//true
}

}
时间: 2024-08-10 05:22:17

详解equals和==的区别的相关文章

详解HTTPS和HTTP区别

刚开始学习HTTP 时,你是否很困惑HTTPS和HTTP有哪些区别?写这篇文章就是来分析分析这个问题的. 在上网获取信息的过程中,我们接触最多的信息加密传输方式也莫过于 HTTPS 了.每当访问一个站点,浏览器的地址栏中出现绿色图标时,意味着该站点支持 HTTPS 信息传输方式.HTTPS 是我们常见的 HTTP 协议与某个加密协议的混合体,也就是 HTTP+S.这个 S 可以是 TLS(安全传输层协议).也可以是 SSL(安全套接层),不过我更认可另一个抽象概括的说法,HTTP+Securit

详解equals()方法和hashCode()方法

前言 Java的基类Object提供了一些方法,其中equals()方法用于判断两个对象是否相等,hashCode()方法用于计算对象的哈希码.equals()和hashCode()都不是final方法,都可以被重写(overwrite). 本文介绍了2种方法在使用和重写时,一些需要注意的问题. 一.equal()方法 Object类中equals()方法实现如下: public boolean equals(Object obj) { return (this == obj); } 通过该实现

原码、反码、补码详解 及 >> 和 >>>的区别

前段时间仔细研究了原码.反码.补码的知识,今天又碰到了,没想到又忘了,哎,好记性不如烂笔头~. 后来发现一篇专门介绍这方面的文章,写的很是透彻,便直接引用过来了,并且加了>>和>>>的相关知识,原文地址是:http://www.cnblogs.com/zhangziqiu/ 一. 机器数和真值 在学习原码, 反码和补码之前, 需要先了解机器数和真值的概念. 1.机器数 一个数在计算机中的二进制表示形式,  叫做这个数的机器数.机器数是带符号的,在计算机用一个数的最高位存放符号

详解shell脚本括号区别--$()、$「 」、$「 」 、$(()) 、「 」 、「[ 」]

概述 很多时候我们在写shell脚本的时候总会碰到不同的括号,那么这些不同的括号有什么区别呢? $() 用于命令交换 说明:平时脚本用的``符号也是用于命令交换的哦,和$() 的操作是一样的 ${ } 用于变量替换,这里每次调用环境的时候是需要带一个${ } 但是不带也不会影响 这个定义了变量的范围,比较不容易出错 $[ ] --条件判断用的比较多 用于算术计算,注意里面出现的只有数字 如果在里面输出其他非数字的就报错: $(()) 这个效果和$[ ] 差不多,两个都是计算的 [ ] 条件表达式

ui-router详解(二)ngRoute工具区别

我们了解 angular.js 是一种富客户端单页面应用,所以要在一个页面呈现不同的视图,路由起到了至关重要的作用. angular.js 为我们封装好了一个路由工具 ngRoute ,它是一种靠url改变去驱动视图. angularUI 也为我们封装了一个独立的路由模块 ui-router ,它是一种靠状态 state 来驱动视图. 后者有什么优势:一个页面可以嵌套多个视图,多个视图去控制某一个视图等. ngRoute 使用时需要ui中用ng-view指令指定 如:<div ng-view>

详解prototype与__proto__区别

Each constructor is a function that has a property named "prototype" that is used to implement prototype-based inheritance and shared properties. Every object created by a constructor has an implicit reference (called the object's prototype) to

Java中的==和equals的区别详解

1.基础知识 (1)String x = "hello"; (2)String x = new String ("hello"); 第1种方式的工作机制是,首先看内存中有没有存放值为"hello"的地址,如果有则将x指向这块内存地址:如果没有则在内存中重新开辟一块地址存放值"hello",并将x指向这块内存地址. String x = "hello"; String y = "hello"

equals()和hashcode()详解

转载自http://www.cnblogs.com/Qian123/p/5703507.html java.lang.Object类中有两个非常重要的方法: public boolean equals(Object obj) public int hashCode() Object类是类继承结构的基础,所以是每一个类的父类.所有的对象,包括数组,都实现了在Object类中定义的方法. equals()方法详解 equals()方法是用来判断其他的对象是否和该对象相等. equals()方法在ob

Java提高篇——equals()与hashCode()方法详解

java.lang.Object类中有两个非常重要的方法: 1 2 public boolean equals(Object obj) public int hashCode() Object类是类继承结构的基础,所以是每一个类的父类.所有的对象,包括数组,都实现了在Object类中定义的方法. equals()方法详解 equals()方法是用来判断其他的对象是否和该对象相等. equals()方法在object类中定义如下: public boolean equals(Object obj)