【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的缘故。

posted @ 2020-08-26 19:02  Geeksongs  阅读(3190)  评论(0编辑  收藏  举报

Coded by Geeksongs on Linux

All rights reserved, no one is allowed to pirate or use the document for other purposes.