并不是很理解== 和equals之间区别。

来源:2-4 Java 中的 String 类常用方法 Ⅱ

默默努力的友人A

2019-12-06 16:24

  看了一个大佬回答 我是这样认为的。

  1. 基本数据类型,应用双等号(==),比较的是他们的值。 

  2. 复合数据类型(类) 用(==)进行比较的时候,比较的是他们在内存中的存放地址, 

    而equals的方法原本也是比较地址的,但在一些类库当中这个方法被覆盖掉了,如String,Integer,Date在这些类当中equals有其自身的实现,而不再是比较类在堆内存中的存放地址了,就是所谓比较值。

    是不是这样认为呢?

    如果是

    题目中String s = "aljlkdsflkjsadjfklhasdkjlflkajdflwoiudsafhaasdasd"; 因为是string 那用equals比较的就是值?为什么不能单独用equals呢 a是值啊?有大佬知道吗?

     另外 为什么不能用s[i].equals('a')呢

写回答 关注

4回答

  • 飒沐_Samuel
    2019-12-06 23:00:13
    已采纳

    先回答你的最后一个问题吧——

    首先:s是一个字符串,不能用是s[i]访问某一个字符,这是数组的特有形式(我刚刚测试的,编译器如是报错的,你可以在你的eclipse中试一试)

    其次:即使你用s.charAt(i)得到了某一个字符,也不能用.equals()方法,因为字符是基本数据类型,而不是类/对象,所以不能用【 . 方法()】   

    默默努力的友...

    OK 懂了 我说的什么单独使用equals是我理解错了,现在懂了。 最后一个问题,我忘在eclipse运行,当时有点迷。。 误将字符串当成数组形式进行运算了,哈哈哈,谢谢你了,非常感谢。ありがとうございます!鞠躬!

    2019-12-13 16:51:32

    共 1 条回复 >

  • 远赴山河万里
    2020-03-18 23:07:07
    //String类位于java.lang包中,默认导入
    //==如果作用于基本数据类型,则比较的是值是否相等;
    //如果作用于引用类型,则比较的是变量所指向的对象的地址
    //对于非String、Date类型equals比较的是引用类型的变量所指向的对象的地址
    //但对于String、Date类型,在其类中重写了equals(),所以比较的是值
    //Object类型相等判断为什么重写equals()和hashcode()
    //equals()方法是比较两个对象的内存地址是否相等,如果不重写,显然两个对象由于不同存储地址所以是不相等的
    //总结==符号在不作用于基本数据类型时,比较地址
    //equals在不作用于String,Data时候,比较地址


    慕少1317...

    不作用于 可否理解为 在不是基本数据类型时使用 你们这些大佬在解释的时候可否通俗易懂点, 理解你们的意思都要理解半天

    2020-05-20 15:24:27

    共 1 条回复 >

  • Fff79
    2020-02-27 16:36:59
    可以用s.toCharArray方法,把s转为char类型数组,变成字符数组,再用for循环遍历char数组比较是否为a,比较的时候用==,而且后边比较的字符得用单引号。


  • 飒沐_Samuel
    2019-12-06 22:52:32

    没太搞懂你说的什么意思。。。什么叫单独使用equals?

Java入门第三季

Java中你必须懂得常用技能,不容错过的精彩,快来加入吧

409775 学习 · 4546 问题

查看课程

相似问题