Java之神秘的字符串操作

Posted on 2009-06-29 12:50  云之上  阅读(149)  评论(0编辑  收藏  举报
  1. package basic;   
  2.   
  3. public class StringTest {   
  4.     private static void test3() {   
  5.         String s1 = new String("Hello");   
  6.         String s2 = new String("Hello");   
  7.            
  8.         String s3 = "Hello";   
  9.         String s4 = "Hello"//1   
  10.            
  11.         System.out.println(s1 == s2);   
  12.         System.out.println(s3 == s4);   
  13.         System.out.println(s1 == s3);   
  14.     }   
  15.     public static void main(String[] args) {   
  16.         test3();   
  17.   
  18.     }   
  19.   
  20. }  

 

输出为:

false
true
false

理由如下:

      如果通过直接指定字符串值的方法来创建String对象,它将保存在内存的一个“字符串池”中,而如果“池”中已经存在同样内容的字符串,则将不生成新的字符串,而是直接使用这个已经存在的字符串对象。所以,在行//1中,只是将s4这个变量指向已经存在的对象,也就是s3所指向的对象。因此,在这个时候s3和s4指向的是同一个对象,表达式"s3 == s4"也就等于true了。

     对于使用new操作符创建String对象,无论内存中是否已经存在相同内容的对象,它都会在内存中新建一个新的对象。

     因此:除非必须,不要使用new操作符来创建字符串对象。在进行字符串内容值比较的时候,应该使用.equals()方法而应该避免使用“==”运算符。

 

Copyright © 2024 云之上
Powered by .NET 8.0 on Kubernetes