Java中的"=="永远比较的是两个对象是否是同一个对象(引用指向同一块内存就是同一个对象)

  Java中equals() 在使用必须与类挂上钩,不能单独使用。有的人这样理解"==比较的是对象,而equals()方法比较的是内容(即对象里面的属性)"。

  其实,Java中的equals作为一个方法,我们不能脱离了类来单独讨论它:

  equals()方法是来自于Object类的,源码如下:

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

  Object类中的equals方法与==功能是一模一样的:比较两个对象是否是同一个对象。

  只是,作为Object子类的String类为了符合自身的特质,重写了Object类的equals方法,重写后的效果是:如果两个String对象的值相同,那么调用equals方法返回true,否则返回false。

  看如下演示代码:

 public class Test{

      public static void main(String[] args){
String str1 = "hello";
String str2 = new String("hello");
String str3 = new String("hello");
String str4 = str3;//与str3是同一个对象 System.out.println(str1 == str2);//false,不是同一个对象
System.out.println(str2 == str3);//false,不是同一个对象
System.out.println(str3 == str4);//true,是同一个对象
System.out.println(str1.equals(str2));//true,值(属性)相同
System.out.println(str2.equals(str3));//true,值(属性)相同 A a1 = new A();
A a2 = new A();
System.out.println(a1 == a2);//false,不是同一个对象
System.out.println(a1.equals(a2));//false 因为没有重写equals()方法,所以直接调用Object的equals方法(等同于==),所以错误(因为不是同一对象)
}
} class A{}

  Java中,所有基本数据类型的实现类都按照String类的方式重写了equals方法,这些类都符合”==比较对象,equals比较值“这一结论。

  如果一个类是你自己定义的,那么如果你不重写equals方法,它还是默认比较对象。(直接调用Object类中的方法)

  参考链接:http://jingyan.baidu.com/article/f96699bbc9d6ae894e3c1b81.html

java中的 equals 与 ==的更多相关文章

  1. 浅谈Java中的equals和==(转)

    浅谈Java中的equals和== 在初学Java时,可能会经常碰到下面的代码: 1 String str1 = new String("hello"); 2 String str ...

  2. 浅谈Java中的equals和==

    浅谈Java中的equals和== 在初学Java时,可能会经常碰到下面的代码: String str1 = new String("hello"); String str2 = ...

  3. Java中的equals和hashCode方法

    本文转载自:Java中的equals和hashCode方法详解 Java中的equals方法和hashCode方法是Object中的,所以每个对象都是有这两个方法的,有时候我们需要实现特定需求,可能要 ...

  4. Java中==、equals、hashcode的区别与重写equals以及hashcode方法实例(转)

    Java中==.equals.hashcode的区别与重写equals以及hashcode方法实例  原文地址:http://www.cnblogs.com/luankun0214/p/4421770 ...

  5. java集合(3)- Java中的equals和hashCode方法详解

    参考:http://blog.csdn.net/jiangwei0910410003/article/details/22739953 Java中的equals方法和hashCode方法是Object ...

  6. 【Java学习笔记之二十九】Java中的"equals"和"=="的用法及区别

    Java中的"equals"和"=="的用法及区别 在初学Java时,可能会经常碰到下面的代码: String str1 = new String(" ...

  7. Java中的equals和hashCode方法详解

    Java中的equals和hashCode方法详解  转自 https://www.cnblogs.com/crazylqy/category/655181.html 参考:http://blog.c ...

  8. 关于Java中的equals方法

    关于Java中的equals方法 欢迎转载,但是请填写本人的博客园原址https://www.cnblogs.com/JNovice/p/9347099.html 一.什么是equals方法 equa ...

  9. 沉淀再出发:java中的equals()辨析

    沉淀再出发:java中的equals()辨析 一.前言 关于java中的equals,我们可能非常奇怪,在Object中定义了这个函数,其他的很多类中都重载了它,导致了我们对于辨析其中的内涵有了混淆, ...

  10. 转:Java中的equals和hashCode方法详解

    转自:Java中的equals和hashCode方法详解 Java中的equals方法和hashCode方法是Object中的,所以每个对象都是有这两个方法的,有时候我们需要实现特定需求,可能要重写这 ...

随机推荐

  1. 【python】命令行解析工具argparse用法

    python的命令行参数 之前有用到optget, optparse, 现在这些都被弃用了. import argparse parser = argparse.ArgumentParser() ar ...

  2. 《Drools7.0.0.Final规则引擎教程》之Springboot集成

    本来准备按部就班的一章一章更新Drools相关教程,怎奈QQ群组(593177274)有朋友急需Springboot与Drools的集成demo,于是抽出时间写了一个,现在拿出来分享一下.加入群组可免 ...

  3. ng 动态的生成option。

    ngOptions:根据集合,动态的生成option. select ng-options="color.name for color in colorList" 注意跟ng-re ...

  4. Developing IOS Application with Delphi Xe4 .only for play the toy?

    Recently, i am working on r&d of some keypoint of some app idea. if all thing ok, i will continu ...

  5. Wordpress在主题中自定义登陆页面并且禁用自带的登陆页面

    在使用Wordpress制作主题之后,不想要他自带的登陆页面以及地址. 1.新建一个用户页面来接管与登陆相关的动作 //在主题根目录下新建page-login.php,通过action获取用户动作,然 ...

  6. ResNet网络结构

    MSRA(微软亚洲研究院)何凯明团队的深度残差网络(Deep Residual Network)在2015年的ImageNet上取得冠军,该网络简称为ResNet(由算法Residual命名),层数达 ...

  7. R+markdown+LaTeX 中文编译解决方案

    一丢丢前言 很久之前曾试图以Rmarkdown编译pdf文档,无奈怎么鼓捣都会error,搜索了很久都没能找到比较好的解决方案.在配置上将编译器调成了xeLaTeX后就不了了之.这两天心血来潮研究了一 ...

  8. Spring Aware接口---BeanNameAware BeanFactoryAware ApplicationContextAware

    前言 对于应用程序来说,应该尽量减少对spring api的耦合程度,然后有时候为了运用spring提供的一些功能,有必要让bean了解spring容器对其管理的细节信息,如让bean知道在容器中是以 ...

  9. 关于IO流的抽象类

    被一个问题问愣了:java的IO里有哪些抽象类?这个一时半会儿还真记不得,只知道IO有好几类,具体有哪些抽象类从来没有去认真记过.回头仔细看了下分类和继承才发现其实就两对:字节流的抽象类是InputS ...

  10. implicit declaration of function 'init_MUTEX'

    'init_MUTEX' 在新版本系统上已被淘汰 改用sema_init(sem, 1);