Re: [問題] this用法

作者: PsMonkey (痞子軍團團長)   2014-03-25 14:38:03
※ 引述《broodstare (交給C4就對了)》之銘言:
: 但第三種,"只寫了 this 就可以印出時間??(即呼叫toString這個method)"
: 我不能理解為什麼,this可以呼叫toString,我也有試著去寫toString1,看會如何
: 但this都只印toString
: 如果將toString給註解掉,this就會印出:SimpleTime@642b6fc7 (我自己理解這是
: 記憶體位置)
: 這我想了好久都想不透為什麼this可以指到toString...也有爬文跟google,但查到的
: 大部份this用法都是在說:
: this.member = local_member 這種用法
: 謝謝各位前輩orz
我覺得你的囧點不在 this
在你的 case 中「this」可以簡化視為 instance 的變數名稱
你在 class 外頭 new 一個 instance,意思也一樣
請看下面這兩個 class
public class Empty { }
public class Foo() {
public String toString() {
return "foo.toString()";
}
}
執行的 code 長這樣:
int i = 10;
System.out.println(i);
Empty empty = new Empty();
System.out.println(empty);
Foo foo = new Foo();
System.out.println(foo);
為什麼 System.out.println(foo) 會印出「foo.toString()」
那是因為
http://docs.oracle.com/javase/6/docs/api/
java/io/PrintStream.html#println(java.lang.Object)
然後
http://docs.oracle.com/javase/6/docs/api/
java/lang/String.html#valueOf(java.lang.Object)
(到這邊 Empty 跟 Foo 都一樣)
接著 Foo 又 override 掉 toString()
所以就會印出「foo.toString()」
Java 中的加號另外有哏,例如:
int i = 1, j = 2;
String empty = "";
System.out.println(i + j + empty);
System.out.println(i + empty + j);
結局會不一樣
JSL 我懶得翻,但是基本上加號作用在一個 instance 上
應該就是視為呼叫他的 toString()
這樣干有比較瞭?
作者: broodstare (交給C4就對了)   2014-03-25 15:42:00
謝謝! 我想我應該是有懂了 :)

Links booklink

Contact Us: admin [ a t ] ucptt.com