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。

  • 相关阅读:
    Linux基础命令题(ps/ls + grep)
    Operator Overloading in C++
    C++中class和struct的区别
    poj1110double vision搜索
    poj1321棋盘递归搜索
    vim窗口分割/切换
    xclipmore about copy&paste命令行粘贴
    [转载]怎样花两年时间去面试一个人
    最优二叉查找树optimalBSTC++实现
    vim复制粘贴——系统剪贴板
  • 原文地址:https://www.cnblogs.com/sm1128/p/10504638.html
Copyright © 2011-2022 走看看