java 操作字符串需注意的幾個問題

1、瞭解“==” 和 “equals”的區別。

在java中,所有的對象名其實中一個引用,這一點在字符串比較中可以很清楚的看到。如下:

String s1=new String("hello");

String s2=new String("hello");

boolean b1=(s1==s2)?true:false;//b1=false;

b1=(s1.equals(s2))?true;false;//b1=true

當用“==”操作符時,比較的是s1和s2兩個引用是否是指向同一個對象,而只有equals纔是真正比較兩個字符串對象的值是否相同。

但要注意這種情況:

String s1="hello";

String s2="hello";

boolean b1=(s1==s2)?true:false;//b1=true;

由於String是不可變類,所以如果不是通過new方法創建的字符串對象,只要值相同,都是指向的同一個對象。

2、用“+”操作符操作字符串:

注意 null 和 ""

String st1=null;

String st2="st2";

String st3=""


System.out.println(st1+st2);//output: nullst2

System.out.println(st3+st2);//output: st2

所以在執行+號運算時,一定要注意字符串賦值爲null和""的區別。

3、String變了嗎?

String是一個不可變類,即它是隻讀的。如下面的操作:

String s1="hello";

s1+="world";

這個操作的過程其實是這樣的,s1首先指向一個"hello"的String對象,在執行“+”操作後,s1指向一個“hello world”的String對象。而之前的“hello”對象是沒有釋放的。

從這可以得出下面兩個結論:

1)如果程序中有大量的String類值的變更操作,就會帶來比較大的內存消耗。

2)在創建一個字符串時,沒必要這麼做:new String() 來構造新的字符串對象。因爲如果是這種方式創建String的話,如果兩個字符串引用s1和s2的值相等,它們仍然指向不同的對象。但是如果是這樣,s1="hello";s2="hello",這時,s1和s2指向的是同一個對象。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章