1. == 在比较基本数据类型时,是比较两边的数据的值是否相等

     // 整数类型
    int num1 = 1;
    // 双精度浮点数类型
    double num2 = 1.0;
    // 输出结果为 true
    System.out.println(num1 == num2);
  2. == 在比较引用数据类型时,比较的是两边对象的内存地址,也就是判断两个对象是否指向同一个内存对象

    // 第一种情况
    // 定义一个字符串str1
    String str1 = "test";
    // 将定义的字符串直接赋给str2,其实只是将对象str1的引用赋给了str2,此时两个对象指向同一个内存对象
    String str2 = str1;
    // 输出结果为 true
    System.out.println(str1 == str2); // 第二种情况
    // 定义一个字符串str1
    String str1 = "test";
    // 对于字符串类型,简单第一次创建一个字符串时,会在方法区中的常量池里面创建一个字符串
    // 等第二次在创建一个同样的字符串时,内存中不会再创建一个新的同样的字符串,而是直接将旧的字符串引用赋过去
    String str2 = "test";
    // 输出结果为 true
    System.out.println(str1 == str2); // 第三种情况
    // 使用new关键字在内存中创建一个对象str1
    String str1 = new String("test");
    // 使用new关键字在内存中创建一个对象str2
    String str2 = new String("test");
    // 使用new关键字是在内存中创建新的对象,两个对象在内存中指向的内存地址不一样,输出结果为 false
    System.out.println(str1 == str2);
  3. Object类中的equals()方法

    • 在Object类中的方法底层采用的其实是使用==进行比较,也就是说如果子类不对equals()方法进行重写默认比较的还是两个对象的内存地址(String类型除外,因为String类重写了equals()方法,比较的是两个字符串的内容)
    /**
    * 如果子类不对equals()方法进行重写默认比较的还是两个对象的内存地址
    * @anObject 需要比较的对象
    * @return 指向同一个对象返回true,否则返回false
    */
    public boolean equals(Object obj) {
    return (this == obj);
    }
  4. String类中的equals()方法

    /**
    * String类重写了Object类中的equals()方法,比较的是两个字符串的内容
    * @anObject 需要比较的对象
    * @return 两个字符串相等返回true,否则返回false
    */
    public boolean equals(Object anObject) {
    if (this == anObject) {
    return true;
    }
    if (anObject instanceof String) {
    String anotherString = (String)anObject;
    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;
    }

    例如:

    // 定义一个字符串str1
    String str1 = new String("test");
    // 将定义的字符串直接赋给str2
    String str2 = new String("test");
    // 因为String类重写了Object类中的equals()方法,比较的是两个字符串的内容,输出结果为 true
    System.out.println(str1.equals(str1));

== 和 equals() 方法的区别的更多相关文章

  1. ==和equals()方法的区别

    ==和equals()方法的区别 这是一道经典的面试题,但是很多人对其一直很困惑,最近刚好复习了他们两者的区别,现总结如下: 一.==:两端可以存放不同的数据     1.放基本数据类型:根据基本数据 ...

  2. equals()方法 与 == 区别

    equals()方法 与 == 区别 : equals():在字符串中比较内容,则必须使用equals(变量),如果相等则为true,否则为false == :使用==比较的是地址是否一致 class ...

  3. 一、基础篇--1.1Java基础-hashCode和equals方法的区别和联系

     hashCode和equals方法的区别和联系  两个方法的定义 equals(Object obj)方法用来判断两个对象是否"相同",如果"相同"则返回tr ...

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

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

  5. C#中==与Equals方法的区别

    using System;using System.Collections.Generic;using System.Linq;using System.Text; namespace Console ...

  6. "=="和equals方法的区别

    .==和equal .栈内存和对内存 单独把一个东西说清楚,然后再说清楚另一个,这样,它们的区别自然就出来了,混在一起说,则很难说清楚) ==操作符专门用来比较两个变量的值是否相等,也就是用于比较变量 ...

  7. java中“==”和equals方法的区别,再加上特殊的String引用类型

    ==和equals的区别: 1.==是运算符,而equals是基类Object定义的一个方法,并且equals使用==定义的 2.进行比较时,分为  基本数据类型  的比较和  引用数据类型 的比较 ...

  8. ==运算符和equals()方法的区别

    Java语言程序中判断两个变量是否相等有两种方式:一是运用==运算符,二是运用equals方法. 1. ==运算符 对于==运算符来说,如果两个变量是基本类型的,并且是数值类型,则只要它们的值相等,就 ...

  9. Java 基本数据类型 及 == 与 equals 方法的区别

    Java数据类型分为基本数据类型与引用数据类型. 1 基本数据类型 byte:Java中最小的数据类型,在内存中占1个字节(8 bit),取值范围-128~127,默认值0 short:短整型,2个字 ...

  10. JAVA面试题:equals()方法和== 区别

    http://bbs.csdn.net/topics/390000725 总结: equals在没重写之前和==一样,重写之后,equals只要内容一样即为true equals跟==一般情况下是等价 ...

随机推荐

  1. C语言单片机项目实战超声波雷达测距

    本实验是基于MSP430利用HC-SR04超声波传感器进行测距,测距范围是3-65cm,讲得到的数据显示在LCD 1602液晶屏上. 模块工作原理如下 (1)采用 IO 触发测距,给至少 10us 的 ...

  2. 前端大牛带你了解JavaScript 函数式编程

    前言 函数式编程在前端已经成为了一个非常热门的话题.在最近几年里,我们看到非常多的应用程序代码库里大量使用着函数式编程思想. 本文将略去那些晦涩难懂的概念介绍,重点展示在 JavaScript 中到底 ...

  3. Qt char * 转QString

    1.QString转char * 先将QString转换为QByteArray,再将QByteArray转换为char *. 注意:不能用char *mm = str.toLatin1().data( ...

  4. LCA-离线tarjan模板

    /* *算法引入: *树上两点的最近公共祖先; *对于有根树的两个结点u,v,最近公共祖先LCA(T,u,v)表示一个结点x,满足x是u,v的祖先且x的深度尽可能大; *对于x来说,从u到v的路径一定 ...

  5. Flink入门-第一篇:Flink基础概念以及竞品对比

    Flink入门-第一篇:Flink基础概念以及竞品对比 Flink介绍 截止2021年10月Flink最新的稳定版本已经发展到1.14.0 Flink起源于一个名为Stratosphere的研究项目主 ...

  6. Linux 文本三剑客之 awk

    Linux 系统中一切皆文件. 文件是个文本.可以读.可以写,如果是二进制文件,还能执行. 在使用Linux的时候,大都是要和各式各样文件打交道.熟悉文本的读取.编辑.筛选就是linux系统管理员的必 ...

  7. testNG 注解使用说明

    1.TestNG常用注解 @BeforeSuite 标记的方法:在某个测试套件(suite)开始之前运行 @BeforeTest 在某个测试(test)开始之前运行 @BeforeClass 在某个测 ...

  8. java 雪花算法实现获取分布式id

    import java.lang.management.ManagementFactory; import java.net.InetAddress; import java.net.NetworkI ...

  9. charles抓包修改请求参数发送新的请求

    打开charles -->选择请求右击选择compose---修改参数发送请求

  10. MyBatis Plus中使用and和or

    如图:show me the code 参考: https://mp.baomidou.com/guide/wrapper.html#or