==与equals

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了==与equals相关的知识,希望对你有一定的参考价值。

==:

  1.基础数据类型 比较的是 值

  2.引用数据类型比较的是 内存地址

1.为什么String 类中的equals是比较的 字符串内容

  01.查询Object类中的方法

    public boolean equals(Object obj){

      return(this==obj);  比较的是内存地址

    }

  02.再去看String类中的方法

    String中的equals是重写了Objest类中的equals方法

    比较的是内容

    String a = "abc";
    String b = "abc";
    String c = new String("abc");

    System.out.println(a.equals(b)); // 值肯定一致 所有返回 true
    System.out.println(a == b);// 内存地址也一致 所以 true
    System.out.println("****************************************");
    System.out.println(a.equals(c));// 值肯定一致 所有返回 true
    System.out.println(a == c);// 内存地址不一致 所以 false


    String a = "a";
    String b = "bc";
    String c = "abc";
    System.out.println(c == ("a" + "bc")); //true

    (1).在程序编译期间 会把常量(不变)a 和常量bc 合并成 abc
    (2).之后再和“abc“进行比较

    String a = "a";
    String b = "bc";
    String c = "abc";
    System.out.println(c == (a + b)); // false

    (1). a 和 b 都是变量(变化), 在编译期间无法确定变量的值
    (2). c在编译期间已经确定, ab无法确定

    final String a = "a";
    final String b = "bc";
    String c = "abc";
    System.out.println(c == (a + b)); // true
    final可以修饰:
      (1).修饰的属性,就是常量 运行期间不能改变
      (2).修饰的方法,不能被子类重写
      (3).修饰的类,不允许被继承

  public static void main(String[] args) {

    // 创建两个学生对象 之后 使用 ==进行比较
    Student stu1 = new Student(1, "小黑");
    Student stu2 = new Student(1, "小黑");
    System.out.println(stu1 == stu2); // 内存地址不一致 false
    /**
    * 如果对象的每个属性都一致!我们 想个办法让 两个对象相等:
    */
    System.out.println(stu1.equals(stu2)); // 内存地址不一致 但是内容一致 我们认为是true

  }

 

以上是关于==与equals的主要内容,如果未能解决你的问题,请参考以下文章

Object类各个方法的详解

Object类各个方法的详解

Object类各个方法的详解

java中的==和equals详解

LDAP 与 MYSQL .. JA-SIG CAS 与 LDAP 与 CAS 与 MySQL

python网络编程基础(线程与进程并行与并发同步与异步)