首页 > 其他 > 详细

细谈 == 和 equals 的具体区别 【包括equals源码分析】

时间:2020-06-13 15:23:07      阅读:36      评论:0      收藏:0      [点我收藏+]

1.前言

  昨天舍友去面试,被面试官的问题难住了:俩个学生类除了学生姓名不同用.equal来比较。

我是一脸懵逼的 ,问题说的很模糊 ,

理解字面意思为 :一个 实体类名叫Student ,内部属性有学生姓名等 ,然后该类被new 了两个对象 ,输入不同的name值 ,然后使用 .equals比较是否相同。

  我是怎么想都决定不可能相等的啊 ,new了不同的对象 ,不论是存在栈还是堆空间的地址都不可能相同的 ,难道使用使用get方法一个一个值取出来再比较?

这问题简直是脱裤子放屁。

2.操作

实体类Student

技术分享图片
package com.example.javabaisc.MyEqual;

public class Student {
    private String name;
    private int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}
View Code

测试类

技术分享图片
package com.example.javabaisc.MyEqual;

import org.junit.jupiter.api.Test;

public class StuTest {

    @Test
    public void t() {
        Student student = new Student();
        student.setAge(18);
        student.setName("cen");

        Student student2 = new Student();
        student2.setAge(18);
        student2.setName("cen");

        System.out.println("========equql 比较对象=============");
        if (student.equals(student2)) {
            System.out.println("一样");
        } else {
            System.out.println("不一样");
        }
        System.out.println("==========使用 == 比较地址空间====================");
        if (student == student2) {
            System.out.println("一样");
        } else {
            System.out.println("不一样");
        }

    }

}
View Code

 

3.测试

启动测试类,打印结构

技术分享图片

 

 4.分析

看到打印结果,果然不出我所料,不论是  == 比较还是 equals 比较,结果都是false ,即不等。

为什么?

  ==号,如果比较的两个 元素是 基本数据类型 ,则直接比较数值   ,如果是引用类型 【也就是对象】,他比较的是一个对象在内存中的地址值【常量放在常量池、对象放在堆里面,都有相应的空间地址】

  equals 的情况比较复杂,首先会比较 对象在内存中的地址值 ,如果不想相等 ,则继续比较,先判断是不是String类型 ,如果不是则直接返回false ,如果是,则将对象强转String ,

然后一位一位的字符比较ASCLL码是否相等,如果有一个不等,则直接返回false,如果全部相等,则返回true.

下图为源码:

技术分享图片

 

 5.结论

 使用equals对比两个对象,如果对象不是String类型 ,则永远是false。

 

细谈 == 和 equals 的具体区别 【包括equals源码分析】

原文:https://www.cnblogs.com/c2g5201314/p/13113760.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!