zoukankan      html  css  js  c++  java
  • Java与JavaScript中判断两字符串是否相等的区别

    JavaScript是一种常用的脚本语言,这也决定了其相对于其他编程语言显得并不是很规范.在JavaScript中判断两字符串是否相等直接用==,这与C++里的String类一样.而Java里的等号则是判断两字符串的引用是否一样,判断实体需要用equals()方法,或者compareTo()方法,这里需要强调的是equals()方法的参数类型,其参数类型绝对不是String类,而是Object类,咱不止一次看到国内一些教程写的是String类(o(╯□╰)o)。

    大家可以看看JDK的源码:

      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;
        }我们可以看到参数类型为Object类,顺带也说说这个代码,首先判断两者引用是否相同,如果引用相同的话实体自然相同.接下来就涉及到类的转换:

    我们将子类创建的对象赋给父类,我们称之为上转型对象。在此基础上,还可以将父类对象转换成子类对象.简单来说,类之间的转换是有一定的条件的,并且需要用instanceof来判断。每个类中的equals()方法来源于Object类,这样也不难理解equals()方法的参数类型是Object类。值得一提的是,Java中String类的compareTo()方法:

     public int compareTo(String anotherString) {
            int len1 = value.length;
            int len2 = anotherString.value.length;
            int lim = Math.min(len1, len2);
            char v1[] = value;
            char v2[] = anotherString.value;
    
            int k = 0;
            while (k < lim) {
                char c1 = v1[k];
                char c2 = v2[k];
                if (c1 != c2) {
                    return c1 - c2;
                }
                k++;
            }
            return len1 - len2;
        }

    compareTo()中参数为String类,因为String类实现了Comparable接口.基本上绝大多数类都实现了这一个接口。

    (ps:一个来源于继承,一个来源于接口这就是两者参数类型不一致的原因诶)。

  • 相关阅读:
    【转】Java8学习笔记(1) -- 从函数式接口说起
    解决sublime text 2总是在新窗口中打开文件(标签中打开)
    Cocoapod安装使用
    使用工具来提升Android开发效率
    Material Design之FloatingActionButton的使用
    HDU2842-Chinese Rings(递推+矩阵高速幂)
    阿里笔试题(2015)持续更新中
    Newton‘ method 的优缺点
    解决的方法:warning: Clock skew detected. Your build may be incomplete.
    云享 值得一用的在线文档即时通讯平台 新用户持续免费
  • 原文地址:https://www.cnblogs.com/mlgjb/p/5678325.html
Copyright © 2011-2022 走看看