System. out. println("3: nl.i: #+ nl.i+ n2.i:"+n2.i); String[] t "2:n1.i:47,n2.i:47 3:n1.i:27,n2.i:27 首先,提请大家注意一下新加的这一彳 import com. bruceeckel. simpletest *i 它引入了专门用于测试本书代码的“ simpletext”类库,我们会到第 15章再详细讲解这个类库。在 Assignment类的开始部分,有这么 static Test monitor new Test(i 它会创建一个名为 monitor的的Test类的实例,而Test又是 simpletext的一个类。在main()的最后,你还会看到 monitor. expect (new string[] i 1:n1.i:9,n2.i:47", 2:n1.i:47,n2 "3:n1.i:27,n2.i:27 }) 这是用 String数组表示的,程序的预期输出。程序运行的时候,不但会 把输出打印岀来,而且会拿它同数组作比较,以检验是不是正确。于是你 会发现,如果程序用到了 simpletext,那它肯定会调用显示程序输出的 expect()。这样你就能从源代码里看到正确的输出了 Number类很简单。main()创建了两个 Number类的实例(n1和 n2)。它们的i被分别赋上了不同的值,然后把n2赋给n1,再修改 n1。在很多别的编程语言里,你可以设想n1和n2自始至终都是两个 独立的对象。但在Java里面,由于是对 reference进行赋值,因此从 expect()语句可以看出,对n1的修改会影响到n2!这是因为,n1 和n2都是 reference,而这两个 reference又指向同一个对象。(原先 那个在n1里面的 reference,指向的是保存9这个值的对象。在赋值过 第4页共48页shhgs@wgqqh.com 4 ✁ ✂ 48 ✁ System.out.println("3: n1.i: " + n1.i + ", n2.i: " + n2.i); monitor.expect(new String[] { "1: n1.i: 9, n2.i: 47", "2: n1.i: 47, n2.i: 47", "3: n1.i: 27, n2.i: 27" }); } } ///:~ ~/¹3Kä( 30 import com.bruceeckel.simpletest.*; At, )¡¢ £(ÍsimpletestÏe¤Wºg 15 ûÁ¥¦©£ ×e¤F Assignmen t e(m Z3 0 static Test monitor = new Test(); Aº§¨3×Ñ mon itor (( Test e(ñ]à Test ü simpletest (3×eF main ( ) (b¡º<g0 monitor.expect(new String[] { "1: n1.i: 9, n2.i: 47", "2: n1.i: 47, n2.i: 47", "3: n1.i: 27, n2.i: 27" }); Strin g "zh(â(?@©!â(MXº P©!]ª!QຫA"z18E¬Xx)¡ ºìíÄÅâg, simpletestYA®OºNâ©!( expect( ) ¦¡;¯£Ë<gx(©!, N umber e)tmain ( )§¨,e× N umber e(ñ] (n 1 n 2 )AW( i T°~J,X(L|P n 2 ~¬ n 1Áïð n 1FV°(áâË¡ÝE?| n 1 n 2 ý±:Æe× ²³(¥_F Java ˶`)¥ referen ce (~Læò expect( )ÝE<!¥ n 1 (ïðº g n 2 ´ æn 1 n 2 Æ referen ceà e× referen ce üy3×¥_(å/ Y×F n 1 ˶( referen cey(µ 9 ×L(¥_F~L^