首先我們來看下JDK1.6所有父類Object中的toString方法是怎么描述的:
————————————————————————
toString
public String toString()
返回該對象的字符串表示。通常,toString 方法會返回一個“以文本方式表示”此對象的字符串。結果應是一個簡明但易於讀懂的信息表達式。建議所有子類都重寫此方法。
Object 類的 toString 方法返回一個字符串,該字符串由類名(對象是該類的一個實例)、at 標記符“@”和此對象哈希碼的無符號十六進制表示組成。換句話說,該方法返回一個字符串,它的值等於:
getClass().getName() + '@' + Integer.toHexString(hashCode())
——————
返回:
該對象的字符串表示形式。
————————————————————————
從API文檔中可以了解到Object.toString方法(JVM中自帶的)是返回一長串字符串即地址(cn.com.zxjy.oo.jdbc.project.vo.UserVo@15db9742
),而不是你想要的原始數據,所以怎么輸出類中的原始數據呢?
下面我給你舉個簡單的例子:
public class UserVo { private String userId; private String password; private String userType; public UserVo(String userId, String password, String userType) { super(); this.userId = userId; this.password = password; this.userType = userType; } public String getUserId() { return userId; } public void setUserId(String userId) { this.userId = userId; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getUserType() { return userType; } public void setUserType(String userType) { this.userType = userType; } /*public String toString() { return userId + " " + password + " " + userType; }*/
public static void main(String args[]) { UserVo vo = new UserVo("zx001", "趙克德", "中層主管"); System.out.println(vo.toString()); } }
(文中綠色字體表示重寫的toString 方法)
重寫toString方法結果:
zx001 趙克德 中層主管
未重寫toString方法(調用Object中方法)結果:
cn.com.zxjy.oo.jdbc.project.vo.UserVo@15db9742
在User類中 如果不實現重寫toString方法(覆蓋原Object中的toString方法),則主方法中將自動調用Objec中的toString方 法,將輸出的是User類中的地址(cn.com.zxjy.oo.jdbc.project.vo.UserVo@15db9742);
而如果在User類中重寫上面的toString方法(覆蓋原Object中的toString方法),則主方法中調用重寫的toString方法,輸出類中原本的數據(zx001 趙克德 中層主管);
所以如果想要輸出原來類中的數據而不是類中的地址,就需要在類中重寫toString方法,達到覆蓋Object超類中的toString方法的目的。
轉發請標明原稿出處:https://www.cnblogs.com/amoszha/p/10894895.html