作者darkk6 (Mr. Pan)
看板java
标题Re: [问题] Getter and Setter
时间Sat Jul 13 10:46:34 2013
1F:→ gn00742754:然而,String不是也是物件吗?可是他却没有这样的问题07/13 00:12
2F:推 coolcomm:因为Java的String是immutable07/13 01:05
如同 coolcomm 大所说 Java 的 String 是 immutable,所以不会有这个问题,
下面用图解的方式说明差异:
========================================================
class Foo{
private String fooStr="台风";
private int[] fooArr=int[1];
public String getString(){ return fooStr; }
public int[] getArray(){ return fooArr; }
}
public static void main(String[] args){
int[] array=new int[1];
String str="哭哭";
Foo f=new Foo();
str=f.getString();
array=g.getArray();
array[0]=1;
str="囧囧";
}
===============================================================
[ Main method line by line ]
int[] array=new int[1];
╭─────╮
array ───→ │ int[1] │
╰─────╯
------
String str="哭哭";
╭─────╮
array ───→ │ int[1] │
╰─────╯
╭────╮
str ────→│ "哭哭" │
╰────╯
-----
Foo f=new Foo();
╭
───╮ ┌──── f
╭─────╮
│int[1]│←┐ ↓
array ───→ │ int[1] │
╰───╯ │╭─────╮
╰─────╯
└┼─fooArr │
╭────╮
│ │
str ────→│ "哭哭" │
╭───╮ ┌┼─fooStr │
╰────╯
│"台风"│←┘╰─────╯
╰───╯
-----
str=f.getString();
╭───╮ ┌──── f
╭─────╮ │int[1]│←┐ ↓
array ───→ │ int[1] │ ╰───╯ │╭─────╮
╰─────╯ └┼─fooArr │
╭────╮ │ │
str
───┐ │ "哭哭" │ ╭───╮ ┌┼─fooStr │
│ ╰────╯ │"台风"│←┘╰─────╯
└────────→ ╰───╯
-----
array=g.getArray();
┌────────→ ╭───╮ ┌──── f
│ ╭─────╮ │int[1]│←┐ ↓
array
──┘ │ int[1] │ ╰───╯ │╭─────╮
╰─────╯ └┼─fooArr │
╭────╮ │ │
str ───┐ │ "哭哭" │ ╭───╮ ┌┼─fooStr │
│ ╰────╯ │"台风"│←┘╰─────╯
└────────→ ╰───╯
-----
array[0]=1;
因为 array 和 fooArr 指向同一个 object , 变动该 object 两个变数都会受影响
(虽然说受影响好像不太恰当,反正就是两个变数取出来的值会一样)
-----
str="囧囧";
由於 Java String Immutable 的特性,当执行这个叙述的时候其实是这样:
┌────────→ ╭───╮ ┌──── f
│ ╭─────╮ │int[1]│←┐ ↓
array ──┘ │ int[1] │ ╰───╯ │╭─────╮
╰─────╯ └┼─fooArr │
╭────╮ │ │
str
──┐ │ "哭哭" │ ╭───╮ ┌┼─fooStr │
│ ╰────╯ │"台风"│←┘╰─────╯
│ ╭───╮ ╰───╯
└─→ │"囧囧"│
╰───╯
str 和 fooStr 是指向
不同的 objecy
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 36.238.228.107
3F:推 popcorny:这也太用心了吧...大推 07/13 12:11
4F:推 pkmilk:推 07/13 13:14
5F:推 gn00742754:推! 07/13 13:59
6F:推 kaocoming:推推 07/13 16:11
7F:推 a60301:超用心得啊,大推 07/15 17:18
8F:推 cn1754:超用心啊!! 大推 07/20 01:57