• Groovy In Action 笔记 (2) -- '=='与‘equals’


    聊聊Groovy中的 '==' 与 'equals'

    先看看Java中它们的区别

    • '=='
      • 对于值类型,则比较值
      • 对于引用类型,则比较两个变量是否指向的为相同内存地址
    • 'equals'
      • 如果类没有override此方法,则比较两个变量是否指向的为相同内存地址
      • 如果有override此方法,则使用子类实现的逻辑进行比较,如String类。
    • 如下代码
      • /*
         * This Java source file was generated by the Gradle 'init' task.
         */
        package practices;
        
        public class App {
            public static void main(String[] args) {
                String str1 = "Hello";
                String str2 = "Hello";
                String str3 = new String("Hello");
        
                System.out.println(str1 == str2) ;// true,此处由于String字面量有缓存
        
                System.out.println(str1 == str3) ;// false
        
                System.out.println(str1.equals(str2)) ;// true
        
                System.out.println(str1.equals(str3)) ;// true
        
            }
        }

    再看看Groovy中的表现:

    • =='
      • 对于值类型,则比较值
      • 对于引用类型,则比较两个变量是否指向的为相同内存地址 -- 注意String 类型有例外,String类override了==操作符,实现了内容比较
    • 'equals'
      • 如果类没有override此方法,则比较两个变量是否指向的为相同内存地址
      • 如果有override此方法,则使用子类实现的逻辑进行比较,如String类。
    • 如下代码
      • def str1 = "hello"
        def str2 = "hello"
        def str3 = new String("hello")
        
        println(str1 == str2) // true
        
        println(str1 == str3) // true
        
        println(str1.equals(str2)) // true
        
        println(str1.equals(str3)) // true

    ps:

      Groovy与Java中instanceof 操作为true的前提:两个类由相同的classloader加载。如果使用不同的加载器,即使加载相同的代码文件,两个类的实例分别与对方类进行 instanceof操作,结果均为false.

  • 相关阅读:
    gcc编译器遇到的部分问题的总结(二)
    gcc编译器遇到的部分问题的总结
    Illegal instruction与march编译选项
    使用using与typedef来定义别名
    C++模板学习之递归
    C++模板学习之typename
    简单的listen+fork accept服务器实现
    一个简单的日志类的开发
    linux中的select和epoll模型
    程序异常退出调试(二)
  • 原文地址:https://www.cnblogs.com/FsharpZack/p/13778678.html
Copyright © 2020-2023  润新知