zoukankan      html  css  js  c++  java
  • Java中 == 和 equalse()

    Java中 == 和 equalse()

    原文:https://blog.csdn.net/tonghui_tonghui/article/details/71189536

    1. Java中数据类型有两种:基本数据类型和引用数据类型

    基本数据类型的值存储在内存的栈中;引用数据类型存储的是对象的地址,该地址指向的内存空间存储的才是我们需要的内容,比如字符串,对象等存储在内存的堆中。

    2. 关于==:

    比较的是内存地址。当==比较的是基本数据类型变量时,判断它们是否来自同一个内存地址,由于基本类型变量值是存储在栈里面的,当两个变量有同一个值时,其实它们只用到了一个内存空间,所以比较的结果是true。

    当==比较的是引用数据类型变量时,判断的也是内存地址,如果两个引用的地址信息相同,指向的就是同一个对象,得到的结果就是true。
    例如:

    例子1:
    String s1 = "123";
    String s2 = "123";
    s1==s2 值为true
    例子2:
    String s1 = "123";
    String s2 = new String("123");
    s1==s2 的结果是false
    

    例子1中:java中有字符串缓冲池的概念,通俗的说,就是程序在运行的时候会创建一个字符串缓冲池,里面放了字符串对象,在声明String变量的时候,程序首先会在这个String缓冲池中寻找相同的对象,如果有相同对象,就将已有的地址赋值给引用;如果没有就创建新的内存地址,因此缓冲池里原来有的字符串的那个变量和新申请的变量,其实指向的是同一个内存空间。因此例子1里面s1和s2用到的都是同一个内存空间的“123”。所以此时==的结果是true。

    例子2中:由于s2用new 关键字重写申请了空间,没有用到缓冲池里的原有的变量,所以它们内存地址不相同,所以结果为false。

    3.关于equalse()

    equalse()方法是Object类的基本方法之一,在Object类中的equalse()方法是对两个对象的地址值进行比较的,但是当String、Math、Integer等封装类在使用equalse()方法是已经覆盖了Object类的equalse()方法,所以每个类都有自己的equalse()方法,是比较两个对象的内容是否一样。所以上面的例子如果换成是equalse()比较的话,结果都是true。

  • 相关阅读:
    怎么查看京东店铺的品牌ID
    PPT编辑的时候很卡,放映的时候不卡,咋回事?
    codevs 1702素数判定2
    codevs 2530大质数
    codevs 1488GangGang的烦恼
    codevs 2851 菜菜买气球
    hdu 5653 Bomber Man wants to bomb an Array
    poj 3661 Running
    poj 1651 Multiplication Puzzle
    hdu 2476 String Painter
  • 原文地址:https://www.cnblogs.com/sm1128/p/10504638.html
Copyright © 2011-2022 走看看