JAVA学习笔记(二)字符串的比较

xiaoxiao2021-02-28  28

String比较

String比较的两种主要方法:”==”、”.equals()”;

区别:==比较的是两者是否来自同一个引用,及地址是否相同。地址相同,那么值一定相同。

          .equals()比较的是值是否相同,而不管值的来源。

          .equals()凭借肉眼就能分辨出返回值,而==我还不敢保证,所以先做一些测试。

//定义四个字符串常量 String str = "str"; String str1 = "str"; String strz = "strz"; String strzz = "strzz"; //通过实验来一步一步推进结论 System.out.println(str==str1); //true 结论1:两者都处于常量区的同一位置”str” System.out.println(strz==str+'z'); //false System.out.println(strz.equals(str+'z')); //true 结合上条语句可知 结论2:在程序运行过程中产生的字符串 和 初始声明的常量字符串 并未放在同一个地方(尽管值相同) System.out.println(str+'z'==str+'z'); //false 结论3:在程序运行过程中产生的字符串 和 另一个在程序运行过程中产生的字符串 也没有放在同一个地方(尽管值相等) System.out.println("str"+"zz"=="str"+"zz");//true System.out.println(strzz=="str"+"zz");//true 上一条结论瞬间打脸,添加:结论2结论3不适用于含有纯字符串常量组成的字符串的运算。

由此可以知道:在做String str==”str”这种常量声明时,java会先去寻找之前是否有相等的值在常量区中,如果有的话,两个变量会共享这个常量,”==”运算将返回true。而在程序执行过程中生成的无论是str+”str”,还是str1+str2组合成的字符串,甚至可以推断String str = new String(”str”)产生的str也能一视同仁,只要涉及到变量运算,这几类字符串的值都不再出现于常量区,无论值等不等,相互之间使用”==”运算都将返回false。而”str1”+”str2”常量字符串间的运算仍在常量区。

所以自我提醒:如果想比较字符串的值,那么一定用.equals(),它简单明了返回的一定是你预想的结果,除非你特别想秀或者确实需要。

转载请注明原文地址: https://www.6miu.com/read-1950012.html

最新回复(0)