zoukankan      html  css  js  c++  java
  • 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.

  • 相关阅读:
    InitializingBean
    执行jar的记事本
    vue中$forceUpdate()事件
    帆软时间检索限制90天
    vue清楚子组件v-model绑定的值
    Intellij IDEA中启动多个微服务(开启Run Dashboard管理)
    Java将CST的时间字符串转换成需要的日期格式字符串
    axios发送命令如何实现同步
    利用tomcat启动web前端
    vue生命周期
  • 原文地址:https://www.cnblogs.com/FsharpZack/p/13778678.html
Copyright © 2011-2022 走看看