【Java】String == 和equals()

来源:互联网 发布:马库斯·斯马特数据 编辑:程序博客网 时间:2024/06/03 17:57
public static void main(String[] args) {    String a = "scd";    String b = null;    String c = new String("scd");    System.out.println("a = "+a);    System.out.println("b = "+b);    System.out.println("c = "+c);    System.out.println("a+b+c = "+a+b+c);    //System.out.println("b.equals(null)? (equals):"+b.equals(null));//NullPointerException    System.out.println("b ==null?:"+(b == null));// == 优先级小于+    System.out.println("a == c?"+(a ==c));}
//运算结果://a = scd//b = null//c = scd//a+b+c = scdnullscd//b ==null? (==):true//a == c?false

比较字符串值是否相同
一般用euqlas()方法。判断字符串是否为null,用==即可,因为
当字符串本身为null值时,使用.equals会报NullPointerException。
从其他博客看到解释如下:
对字符串的相等判断,==判断的是地址是否相同,equals()判断的是字符值是否相同。
如果都是用String a = "abc"这样直接赋值的方式,==相同;如果其中一个是new String("abc"),则==不同,equals()相同。
大多数时候==跟equal()的结果都是相同的。这是因为String对象是不变模式的,如果你不是明确地new一个String对象,Java对于String对象的保存默认的
是会把新生成的String 对象放到一个缓冲区,然后每次判断缓冲区中是否已经有了这个对象,如果有了,那么后建立的同样字符值的String对象也会指向
最初建立是该字符值对象的地址。也就是说字符值相同的时候,大多数情况下地质也是相同的。==与equal()效果是相同的。但是当对象是
str = new String(“abc”)生成的而不是直接str = “abc”这样赋值生成,或者经过了一些字符串连接处理,或者通过StringBuffer等对象生成,都会在内存中
开辟新的地址的,这个时候==和 equal()结果是不同的。 
是不是稍微有些复杂?这里需要一些关于内存,堆栈,对象保存方面的理解。我不想纠缠于这个问题的讨论。如果不能理解,那么只要记住如果你想要判
断两个字符串的字符值是否相等,没有别的要求的时候,那么请使用equal()而不是==,至于什么时候需要使用==,我想当你需要的时候,你自然就会明
白了。实际上,对于字符串的判断,我们很少需要用==的。
                                             
0 0