作者tkcn (小安)
看板java
标题Re: [问题] 传值
时间Wed Sep 15 23:10:30 2010
※ 引述《Arim (Arim5566)》之铭言:
: //test2.java
: 1 public class test2
: 2 {
: 3 public static void main(String[] args) {
: 4 Integer i=new Integer(5);
: 5 System.out.println(i);
: 6 some(i);
: 7 System.out.println(i);
: 8 }
: 9 private static void some(Integer j)
: 10 {
: 11 j=50;
: 12 }
: 13 }
: Output出来的结果,i仍然是5
: 不过Integer不是属於物件型态嘛?
: 那为什麽在这个例子,仍然相当於c++的传值呼叫?
: 做所谓的装箱动作不就是为了要有传参考的效果嘛?
有两件事你需要注意:
1. Integer, Character, Double, ...
这些 Wrapper 物件都有个特性叫做 Immutable,
你没有办法去修改这些物件所代表的值。
String 也有 Immutable 的特性,我用它来举个例:
String s1 = "foo";
s1 += "bar";
第二行看起来很像是把 "bar" 接到 s1 後面,
但其实是另外生成了一个内容为 "foobar" 的 String 物件,
而原本的 foo 物件其实还在。 (只是不再被 reference 了)
2. j = 50 这行用了另一个特性叫做 Auto-Boxing,
其实等同於 j = new Integer(50) ,
所以当执行完这一行後,j 指向的是新的物件,而 i 指的还是原来的物件。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.122.183.195
※ 编辑: tkcn 来自: 140.122.183.195 (09/15 23:11)
1F:推 Arim:谢谢大大的解释 09/15 23:24
2F:推 ppkliu:所以要call reference字串物件是不可行罗? 09/19 20:16