代码如下
public class Test {
static int i=1;
@org.junit.Test
public static void main(String[] args) {
System.out.println("love "+new Test());
Test a = new Test();
a.i++;
System.out.println("me "+a.i);
}
public String toString() {
System.out.print("I ");
return "java";
}
}
结果如下
I lovejava
me 2
当你看到这段简短的代码输出结果和你想象的不一样的时候,是不是感觉到吃惊,我第一次看到这段代码的时候也很迷惑,然后我就去查阅了以下jdk文档,然后自己测试了以下
然后发现由于所有的对象都继承了Object对象,所以 如果在println中输出一个对象时,对象就会去调用他的toString()方法,所以就会出现先输出“I" ,然后+“love最后加上toString的返回值“java
由于i是一个静态常量,在函数开的时候就直接被加载了。
验证如下
public class Test {
static int i=1;
@org.junit.Test
public static void main(String[] args) {
// System.out.println("love "+new Test());
System.out.println(new Test());
//输出[email protected]
//ystem.out.println(new Test().toString());
//输出[email protected]
Test a = new Test();
a.i++;
System.out.println("me "+a.i);
}
// public String toString() {
// System.out.print("I ");
// return "java";
// }