Re: [問題] 請教String的問題
問題和 String 的 Immutable 比關係較無關(應該說較少),主要是 Method 的
Pass by value 問題
底下用簡單的圖解來表示變數與記憶體之間的關係:
====================================================================
public static void main(String[] args){
String str1 = "Hello";
System.out.println(str1); str1 ──┐
tell(str1); ↓
System.out.println(str1); ┌───┐
} │Hello │
└───┘
public static void tell(String str2){
str2 = "kdok123";
}
====================================================================
public static void main(String[] args){
String str1 = "Hello";
System.out.println(str1); str1 ──┐
tell(str1); ↓
System.out.println(str1); ┌───┐
} │Hello │
└───┘
//傳遞給 tell 的 是這個 "Hello" String 的位置 ↑
public static void tell(String str2){ str2 ────┘
str2 = "kdok123";
}
====================================================================
public static void main(String[] args){
String str1 = "Hello";
System.out.println(str1); str1 ──┐
tell(str1); ↓
System.out.println(str1); ┌───┐
} │Hello │
└───┘
//傳遞給 tell 的 是這個 "Hello" String 的位置 ┌────┐
public static void tell(String str2){ str2 ─────→│kdok123 │
str2 = "kdok123"; └────┘
} // 因為字串的 Immutable 所以會
// 指向另一個物件
====================================================================
回到 main ,你看到 str1 指向哪個物件呢 ?
接著看 ex2 : ┌──┐
┌─────┐│kdok│
public static void main(String[] args){ │Object Ex2│└──┘
Ex2 e1 = new Ex2(); e1 ──→╞═════╡ ↑
e1.temp = "kdok"; │ temp ─┼─┘
System.out.println(e1.temp); └─────┘
tell(e1);
System.out.println(e1.temp);
}
public static void tell(Ex2 str2){
str2.temp = "kdok123";
}
============================================================================
┌──┐
┌─────┐│kdok│
public static void main(String[] args){ │Object Ex2│└──┘
Ex2 e1 = new Ex2(); e1 ──→╞═════╡ ↑
e1.temp = "kdok"; ┌───→│ temp ─┼─┘
System.out.println(e1.temp); │ └─────┘
tell(e1); │
System.out.println(e1.temp); │
} │
│
public static void tell(Ex2 str2){ │
str2.temp = "kdok123"; str2 ┘
}
============================================================================
┌──┐
┌─────┐│kdok│
public static void main(String[] args){ │Object Ex2│└──┘
Ex2 e1 = new Ex2(); e1 ──→╞═════╡
e1.temp = "kdok"; ┌───→│ temp ─┼─┐
System.out.println(e1.temp); │ └─────┘ │
tell(e1); │ ↓
System.out.println(e1.temp); │ ┌────┐
} │ │kdok123 │
│ └────┘
public static void tell(Ex2 str2){ │
str2.temp = "kdok123"; str2 ┘
} // 因為字串的 Immutable 所以會
// 指向另一個物件
============================================================================
回到 main , 你看到 e1.temp 是指向哪個物件呢?
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 218.164.118.189
※ 文章網址: http://www.ptt.cc/bbs/java/M.1418888100.A.52D.html
推
12/18 15:40, , 1F
12/18 15:40, 1F
→
12/18 15:40, , 2F
12/18 15:40, 2F
→
12/18 15:40, , 3F
12/18 15:40, 3F
推
12/18 15:42, , 4F
12/18 15:42, 4F
→
12/18 15:43, , 5F
12/18 15:43, 5F
→
12/18 15:44, , 6F
12/18 15:44, 6F
→
12/18 15:44, , 7F
12/18 15:44, 7F
推
12/18 15:47, , 8F
12/18 15:47, 8F
→
12/19 07:23, , 9F
12/19 07:23, 9F
討論串 (同標題文章)
java 近期熱門文章
PTT數位生活區 即時熱門文章