zoukankan      html  css  js  c++  java
  • 【Java】:Java当中为什么不能够直接用==比较String字符串

    因为在java当中比较字符串String实际上比较的是字符串之间的地址,这一点比较奇怪,而比较数字则是货真价实的比较数字的大小。因此我们为了判断两个字符串是否是一样的可以使用:

    str.equals(str2)

    来进行判断,str是一个字符串,str2是用来比较的字符串。我们在Python当中直接比较就可以了,希望Java也能做出相应的优化。

    但是这是为什么呢?因为在Java当中具有两种大的数据类型,一种是引用类型,一种是基本类型。

    1.对基本类型而言,使用==进行比较,是直接比较两个数据类型之间的数值

    2.对于引用类型而言,使用==进行比较,是比较的两个数据类型之间的地址

    一般情况下String字符串和数组都不是基本数据类型,它们被当作类来处理,也就是我们所说的引用数据类型,因此我们比较字符串的时候,需要使用str.equals(str2)而不是直接使用==进行比较。我们来看一段程序:

            //下面我们来了解字符串的常量池
            String str="gre";
            String str2="gre";
            char[] chars={'g','r','e'};
    
            String arraychar=new String(chars);
            System.out.println(str==str2);//true
            System.out.println(str==arraychar);//false
            System.out.println(str2==arraychar);//false

    对于前面两个定义str和str2而言,str和str2当中所保存字符由于是相同的,因此jvm为了节约内存,就让这个字母在内存当中的地址是相同的,在java当中字符串是不可修改的缘故,因此str和str2指向的是同一个内存空间,在这个内存空间当中我们爆保存的是gre这三个单词的ASCii码,which are 97,98,99。而对于使用char所创建的string而言,我们开启了一个新的内存空间,因为在内存当中我们保存的是char型字符,which are 'g','r','e',在内存当中保存的东西不一样了,因此地址也就不一样了。我们用于比较的时候字符串又是引用类型,因此最后比较的是地址,地址不一样就会输出false,这也是会最终呈持续的后面两行会输出false的缘故。

  • 相关阅读:
    软件工程个人作业02
    第三周学习进度条
    《构建之法》阅读笔记01
    第二周学习进度条
    软件工程个人作业01
    大道至简第三章读后感
    动手动脑课后实践
    JAVA数字想加并输出
    大道至简第二章读后感
    大道至简读后感
  • 原文地址:https://www.cnblogs.com/geeksongs/p/13567019.html
Copyright © 2011-2022 走看看