System.out.println()方法我們很熟悉,用來控制台輸出,比如System.out.println("abc"),會輸出字符串"abc"。但是當System.out.println()傳遞的參數為對象會是什麼情況呢?下面來看一個簡單的例子:
代碼如下:
package test;
class A{
int a;
int b;
public int getA() {
return a;
}
public void setA(int a) {
this.a = a;
}
public int getB() {
return b;
}
public void setB(int b) {
this.b = b;
}
}
public class Test {
public static void main(String args[]){
A a = new A();
a.setA(8);
a.setB(9);
System.out.println("a.a:"+a.a);
System.out.println("a.b:"+a.b);
System.out.println(a);
}
}
運行結果為:
代碼如下:
a.a:8
a.b:9
test.A@15093f1
可以看到,本來我是想輸出a和b的值,但是結果的第三行卻不是我們想要的結果。為什麼呢?
Object中有一個toString()的方法,但不幸的是我們需要重寫這個方法才能按照我們自己的意願輸出,將上面的程序稍作修改,即添加改寫toString函數的代碼:
代碼如下:
package test;
class A{
int a;
int b;
public int getA() {
return a;
}
public void setA(int a) {
this.a = a;
}
public int getB() {
return b;
}
public void setB(int b) {
this.b = b;
}
public String toString(){
return "A.a:"+a+";A.b:"+b;
}
}
public class Test {
public static void main(String args[]){
A a = new A();
a.setA(8);
a.setB(9);
System.out.println("a.a:"+a.a);
System.out.println("a.b:"+a.b);
System.out.println(a);
}
}
運行的結果為:
代碼如下:
a.a:8
a.b:9
A.a:8;A.b:9