一、对于基本数据类型而言只能用“==”,不能用equals来进行比较,若使用equals来进行比较,则不能通过编译

二、在非字符串的对象的比较中:

“==”与“equals()”比较的均是对象在堆内存中分配的首地址。(即使比较两个变量是否指向同一个对象)

class Student {
private String name;
private int age;
public Student(){}
public Student(String name,int age)
{
this.name=name;
this.age=age;
}
} public class B1 {
public static void main(String as[])
{
Student a= new Student("张三",21);
Student b=new Student("张三",21);
System.out.println(a==b);//false
System.out.println(a.equals(b));//false
} }

运行结果:

不仅是上面这个例子会返回false,只要是在未重写equals方法的所有非字符串的类的实例的比较均会返回false:Object类中定义的equals方法是比较引用地址,而每个对象的引用地址又不相同,所以都会返回false。

解决方法

想要得到比较对象里的内容的真实结果,就得重写equals()方法。

在上面的例子中重写equals()方法:

省略掉与上面例子完全相同的B1类,修改Student的代码如下:

class Student {
private String name;
private int age;
public Student(){}
public Student(String name,int age)
{
this.name=name;
this.age=age;
}
public boolean equals(Object a)
{ if(a==null)
return false;
if(!(a instanceof Student))
return false;
Student student=(Student) a;
return this.name.equals(student.name)&&this.age==student.age; }
}

运行结果如下:

三、在字符串对象的比较中的区别:

“==”,比较的是首地址

equals(): 比较的是里面的内容。

下面通过一个例子来详细讲解:

public class D {
public static void main(String as[])
{
String x1=new String("aass");
String x2=new String("aass");
String x3=new String(x1);
System.out.println(x1.equals(x2));//返回true;里面的内容相同
System.out.println(x1==x2);//返回false;x1与x2不是同一个对象,所以首地址不同
System.out.println(x1==x3);//返回false;理由同上
System.out.println(x1.equals(x3));//返回true;里面的内容都是“aass” String a1="abc";
String a2="abc";
String a3=new String("abc");
System.out.println(a1==a2);//返回true;
System.out.println(a1==a3);//返回false
} }

运行结果为:

“==”与"equals(object)"的区别的更多相关文章

  1. Java中的equals和==的区别以及几个常用的object中的方法简单的调试方法

    一.equals 1.equals:是Object类中的方法,只能判断引用类型 2.默认判断的是地址是否相等(判断两个参数是否是同一个对象),子类中往往重写该方法,用于判断内容(值)是否相等 二.== ...

  2. java equals和==的区别

    大概说equals和==都比较的是什么: 1. boolean tem = a == b; 首先==比较的肯定是地址,从堆栈的角度说也就是说==比较的是栈上面的内容.因为栈是用来存放地址或是java中 ...

  3. equals与==的区别

    equals与==的区别. 下面是equals的源码 public boolean equals(Object anObject) { if (this == anObject) { //如果两个对象 ...

  4. equals和==的区别 你真的掌握了吗?

    PS:最近读Java编程思想的时候发现了一些小问题.就是equals方法和==,感觉自己是真正掌握了,其实并没有.简单的记录一下. 学习内容: 1.equals 和 == 的区别  equals和== ...

  5. Java中“==”与equals方法的区别

    1. 用“==”比较两个变量,如果两个变量是基本类型变量,且都是数值类,则值相等就返回true 如果两个变量是引用型变量,则两个对象的地址一样,即指向同一个对象,则返回true 2.equals:St ...

  6. 【ASP.net】Equals 和 == 的区别

    在比较Equals 和 ==的区别前.我们先来了解下相关的知识 C#数据类型 1.值类型 值类型有: 值类型包括:简单类型.结构类型.枚举类型:引用类型包括:Object 类型.类类型.接口.代表元. ...

  7. [c#基础]值类型和引用类型的Equals,==的区别

    引言 最近一个朋友正在找工作,他说在笔试题中遇到Equals和==有什么区别的题,当时跟他说如果是值类型的,它们没有区别,如果是引用类型的有区别,但string类型除外.为了证实自己的说法,也研究了一 ...

  8. java中.equals和==的区别?

    Java中的equals是十分重要的,和= =要区别开来,孙卫琴的JAVA面向对象编程一书对这个做了阐述,现在小结其主要内容,而且要将 = =和 equals列为重要的对比概念来学习 1.声明格式   ...

  9. 比较compareTo与equals及==的区别

    1.compareTo: 附上:源码: public int compareTo(String anotherString) {         int len1 = value.length;   ...

随机推荐

  1. wifi pineapple 外接USB无线网卡桥接外网

    0:选择USB网卡 在没有有线网络的情况下,可以外挂一个usb无线网卡来桥接上网,目前支持3070L.8187L芯片的网卡,反正linux系统都用这些芯片, 免的安装驱动, 我选择的是 WN-722N ...

  2. Redis订阅和发布模式和Redis事务

    -------------------Redis订阅和发布模式------------------- 1.概念     Redis 发布订阅(pub/sub)是一种消息通信模式:     发送者(pu ...

  3. 【DDD】领域驱动设计精要

    本文算是<领域驱动设计>这本书的读书笔记,加上自己的一些读后感.网上有很多这本书的读书笔记,但是都是别人的,不如自己总结的理解深刻.建议大家在读这本书时结合<实现领域驱动设计> ...

  4. 【Java数据结构学习笔记之二】Java数据结构与算法之栈(Stack)实现

      本篇是java数据结构与算法的第2篇,从本篇开始我们将来了解栈的设计与实现,以下是本篇的相关知识点: 栈的抽象数据类型 顺序栈的设计与实现 链式栈的设计与实现 栈的应用 栈的抽象数据类型   栈是 ...

  5. java开发3轮技术面+hr面 面经(MT)

    一直没打理博客园  发现博客园阅读量好大,就把前段时间写的一个面经也搬过来咯,大家一起加油.... 作者:小仇Eleven 链接:https://www.nowcoder.com/discuss/37 ...

  6. 利用 VMWare 搭建随机拓扑网络

    这篇文章是计算机网络上机实验课的作业. 实验任务:利用 VMWare 搭建一个由 5 个主机组成的随机拓扑的网络.要求该网络中至少有 2 个子网,两个路由器 .实验的网络拓扑图如下: 网络中有两个路由 ...

  7. datable 翻页事件处理

    JQuery datatable插件,点下一页在点击事件无效问题 (2013-10-16 16:01:54) 转载▼   分类: C# 在MVC的项目中,我利用jquery datatable 来实现 ...

  8. 【★】RSA-什么是不对称加密算法?

    不对称加密算法RSA浅析 本文主要介绍不对称加密算法中最精炼的RSA算法.我们先说结论,也就是RSA算法怎么算,然后再讲为什么. 随便选取两个不同的大素数p和q,N=p*q,r=(p-1)*(q-1) ...

  9. RobotFramework自动化测试框架-移动手机自动化测试Input Text和Click Button关键字的使用

    Input Text和Click Button Input Text 关键字一般用来给输入框进行输入操作,该关键字接收两个参数[ locator | text ]. 示例1:启动安卓手机上一个APP的 ...

  10. stable_sort()与sort

    stable_sort与sort()都是c++库函数,调用<algorithm>库,但区别是sort是不稳定的排序,而stable_sort是稳定的,有时候stable_sort比sort ...