作者PsMonkey (痞子军团团长)
看板java
标题Re: [问题] this用法
时间Tue Mar 25 14:38:03 2014
※ 引述《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()
这样干有比较了?
--
钱锺书:
说出来的话
http://www.psmonkey.org
比不上不说出来的话
Java 版 cookcomic 版
只影射着说不出来的话
and more......
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 1.34.226.85
1F:推 broodstare:谢谢! 我想我应该是有懂了 :) 03/25 15:42