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));

最新文章

  1. x64内联汇编注意点
  2. 使用Lamda生成函数
  3. symbol(s) not found for architecture x86_64 之 linker command failed with exit code 1 (use -v to see invocation)解决方案排查
  4. zoj 3717 - Balloon(2-SAT)
  5. IOS 免受xib自动布局影响
  6. Laravel-Administrator enum使用数字key
  7. (hdu)5546 Ancient Go
  8. Mustache学习
  9. hdu1151+poj2594(最小路径覆盖)
  10. 无法启动T-SQL调试。未能连接到计算机"."。这是在主机名解析时通常出现的暂时错误……
  11. 开涛spring3(6.3) - AOP 之 6.3 基于Schema的AOP
  12. [编织消息框架][JAVA核心技术]动态代理应用7-IRpcSend实现
  13. bzoj 1975: [Sdoi2010]魔法猪学院 [k短路]
  14. Android 读取清单文件<meta-data>元素的数据
  15. python10--函数的来源,优点,定义,组成,使用(定义,调用)函数的分类,函数的返回值
  16. SSM框架指的是什么
  17. python 类的介绍
  18. 序列化 java.io.Serializable
  19. 未能加载或程序集“XXXX,Version=0.0.0.0,Culter=neutral,PublicKeyToken=null”或它的某一个依赖项。试图加载格式不正确的程序。
  20. kubernetes系列(一)安装和配置

热门文章

  1. bash执行顺序:alias --> function --> builtin --> program
  2. 电路维修(双端队列 & 最短路)
  3. Java之父 James Gosling 发表博文 《Too Soon》纪念乔布斯。
  4. 腾讯云星星海SA2云服务器特点
  5. 前端---梳理 http 知识体系 1
  6. Get value from agent failed: cannot connect to [[127.0.0.1]:10050]: [111] Connection refused
  7. fork()和vfork()的区别,signal函数用法,exec()系列函数的用法小结
  8. 讲分布式唯一id,这篇文章很实在
  9. Charles抓包 mock数据和rewrite功能
  10. Mybatis:插入数据返回自增主键