<b>string</b><b>的比較問題:</b>
· string是一個系統提供好的類,但是string可以像基本資料類型那樣,直接指派
· string還可以通過new關鍵字指派
public class oodemo12{
public static void main(string args[]){
string str1 = "abc" ;
string str2 = new string("abc") ;
string str3 = str2 ;
}
};
那麼該如何去比較兩個字元串是否相等呢?
· 按照“==”的方式進行比較
system.out.println(str1==str2) ; // false
system.out.println(str1==str3) ; // false
system.out.println(str3==str2) ; // true
比較之後發現,雖然str1和str2的内容是一樣,但是通過==比較之後,結果均為“false”,而str2和str3的比較結果均為“true”。
如果使用了“==”,則最終的比較結果是比較的兩個位址。
· 最終應該比較的是兩個字元串的内容,是以此時,就必須使用string類中提供好的一個方法:
public boolean equals(string str)
public class oodemo13{
system.out.println(str1.equals(str2)) ; // true
system.out.println(str1.equals(str3)) ; // true
system.out.println(str3.equals(str2)) ; // true
使用equals方法比較的是兩個字元串的内容。
<b>注意點1</b><b>:</b>
實際上一個字元串就是string類的匿名對象。
每一個字元串都會在堆記憶體中開辟空間。
string str1 = "abc" ;
· 首先要在堆記憶體中開辟一個空間,此空間存放的是“abc”的字元串,之後把此字元串的位址使用給了str1:system.out.println("abc".equals(str2)) ;<b></b>
<b>注意點2</b><b>:</b>
string有兩種執行個體化方式
· 直接指派
· 使用new關鍵字開辟
以上兩種方式使用那種更好呢?
· 直接指派:它本身隻會産生一個執行個體化對象
public class oodemo14{
· 使用new關鍵字開辟,會産生兩個執行個體化對象
string str1 = new string("abc") ;
使用直接指派的方式比較節約空間,是以絕對不要使用new關鍵字執行個體化對象。
<b>注意點3</b><b>:</b>
· string中的内容一旦聲明則不可改變
string的内容是固定的,如果要改變其内容,修改的是其記憶體的指向。
str1 += "bcd" ;
system.out.println(str1) ;
<b>注意點4</b><b>:</b>
對于一個字元串而言,在java中屬于共享設計模式的應用,即:如果一個字元串已經被另外一個字元串所引用,則以後如果聲明的字元串内容相同,則不會再重新聲明。
public class oodemo15{
string str2 = "abc" ;
system.out.println(str1==str2) ;
<b>注意點5</b><b>:</b>
以下的程式代碼絕對不要出現,出現之後會影響系統的性能。
public class oodemo28{
string str1 = "a" ;
for(int i=0;i<100;i++){
str1 += i ;
}
如果按以上的形式編寫代碼,則string的記憶體指向(斷開和重新連接配接)需要進行100次,性能肯定低。是以此種語句在開發中絕對不允許出現。
實際上string類還存在着大量的系統提供好的方法
1、 取得字元串長度的方法
public int length() à 取出字元串的長度
public class oodemo16{
string str1 = "abcfdafdsadafsdfdssdfa" ;
system.out.println(str1.length()) ;
2、 将字元串變為一個字元數組
public class oodemo17{
char c[] = str1.tochararray() ;
for(int i=0;i<c.length;i++){
system.out.print(c[i]+"\t") ;
3、 将一個字元數組變為字元串
public <b>string</b>(char[] value)
public class oodemo18{
char c[] = {'a','b','c','d','e'} ;
system.out.print(new string(c)) ;
4、 判斷在一個字元串中是否包含一個一個指定的字元串
public int indexof(string str) ;如果查到了則傳回位置,否則傳回-1。
public class oodemo19{
string str = "abcdefg" ;
system.out.println(str.indexof("abc")) ;
if(str.indexof("abc")!=-1){
system.out.println("查到了指定内容。") ;
}else{
system.out.println("沒有查到指定内容。") ;
5、 按照位置截取一定長度的字元串
public string substring(int beging,int end)
public class oodemo20{
system.out.println(str.substring(0,3)) ;
6、 如以下的字元串:“a:b:c”,按照“:”進行字元串拆分
public string[] split(string str) ;
public class oodemo21{
string str = "a:b:c" ;
string s[] = str.split(":") ;
for(int i=0;i<s.length;i++){
system.out.println(s[i]) ;
7、 将“hello world!!!”字元串中的“o”替換成“x”
public string replace(string str)
public class oodemo22{
string str = "hello world!!!" ;
system.out.println(str.replace("o","x")) ;
8、 判斷一個字元串是否是以“**”開頭或結尾。
以指定的字元串開頭:public boolean startswith(string str)
以指定的字元串結尾:public boolean endswith(string str)
public class oodemo23{
string str = "**hello**" ;
system.out.println(str.startswith("**")) ;
system.out.println(str.endswith("**")) ;
9、 給定以下字元串:“mike:70|jones:80|tom:75”
要求拆分成以下格式:
· mike à 70
· jones à 80
· tom à 75
public class oodemo24{
string str = "mike:70|jones:80|tom:75" ;
system.out.println("\"\'\\") ;
// 拆分兩次
string s1[] = str.split("\\|") ;
for(int i=0;i<s1.length;i++){
string s2[] = s1[i].split(":") ;
system.out.println(s2[0]+" --> "+s2[1]) ;
10、取出字元串“hello world”中的第三個字元
public char charat(int
ind
) ;
public class oodemo25{
string str = "helwo" ;
system.out.println(str.charat(2)) ;
11、一個指定的字元數組,将其中指定位置的字元變為字元串
public <b>string</b>(char[] value, int offset, int count)
public class oodemo26{
char c[] = {'h','e','l','w','o'} ;
system.out.println(new string(c,1,3)) ;
12、如何可以進行不區分大小寫的比較?
public boolean equalsignorecase(string str)
public class oodemo27{
system.out.println(str1.equalsignorecase(str2)) ;
<b>繼續探讨對象的引用傳遞</b>
現在觀察以下三道題目,分析其記憶體空間的指向,并說出結果。
class demo{
int x ;
public class demo29{
demo d1 = new demo() ;
d1.x = 30 ;
fun(d1) ;
system.out.println(d1.x) ;
public static void fun(demo d2){
d2.x = 50 ;
public class demo30{
string str = "abc" ;
fun(str) ;
system.out.println(str) ;
public static void fun(string s){
s = "bcd" ;
string name ;
public class demo31{
demo d = new demo() ;
d.name = "abc" ;
fun(d) ;
system.out.println(d.name) ;
public static void fun(demo x){
x.name = "bcd" ;