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. 攻防世界 杂项 11.simple_transfer

    题目描述: 文件里有flag,找到它. 题目分析: 文件解压后是一个抓包流量分析文件,用 wireshark 打开后,用分组字节流搜索 flag,追踪 TCP 流,可以隐约看到有 file.pdf, ...

  2. dhcpd:bad subnet number/mask combination. subnet

    今天在调试wifi热点启动hdcpd服务时出现报错"bad subnet number/mask combination. subnet 192.168.1.1", Interne ...

  3. hdu 1028 Ignatius and the Princess III(母函数)

    题意: N=a[1]+a[2]+a[3]+...+a[m];  a[i]>0,1<=m<=N; 例如: 4 = 4;  4 = 3 + 1;  4 = 2 + 2;  4 = 2 + ...

  4. poj 3020 Antenna Placement(二分图最大匹配)

    题意: N行M列的矩阵,每个格子里不是 * 就是 O . * :是一个利益点. O:是一个空白点. 每次可以用一个圈覆盖相邻的两个*.(左右相邻或上下相邻). 问最少需要多少个圈可以覆盖所有的*. 思 ...

  5. hdu 5100 Chessboard (额,,,,,就叫它趣味数学题吧)

    题意: 用K*1的砖块去覆盖N*N的大矩形,问最多能覆盖多少块. 详细证明:(转载自matrix67) Matrix67: The Aha Moments 趣题:用 k × 1 的矩形覆盖 n × n ...

  6. hdu 1847 Good Luck in CET-4 Everybody! (简单博弈)

    题意: n张牌,双方轮流抓取.每人每次抓取的牌数必须是2的幂次(1,2,4,8...). 最后抓完的人胜. 思路 : 考虑剩3张牌,后手胜. 考虑3的倍数.假设先抓者当轮抓2x 张,2x %3等于1或 ...

  7. cm2 逆向分析

    目录 cm2 逆向分析 前言 查壳 逆向分析 encrypt函数 POC代码 cm2 逆向分析 前言 这是逆向实战之CTF比赛篇的第3篇,在这里我就不再讲的特别小白了,有些简单操作可能会略过. 查壳 ...

  8. 面试官:能用JS写一个发布订阅模式吗?

    目录 1 场景引入 2 代码优化 2.1 解决增加粉丝问题 2.2 解决添加作品问题 3 观察者模式 4 经纪人登场 5 发布订阅模式 6 观察者模式和发布订阅模式的对比 什么是发布订阅模式?能手写实 ...

  9. p->next = q, p = q->next, q->next = p->next的区别

  10. 攻防世界 Misc 新手练习区 gif Writeup

    攻防世界 Misc 新手练习区 gif Writeup 题目介绍 题目考点 仔细联想 字符转换 Writeup 下载附件并打开 104张黑白图 发现是一堆黑色和白色的图片,按某种规律排列,猜想flag ...