30/09/2018, 18:48

nguyên tắc hoạt động của hàm toString() trong java

public class SinhVien_Program {

	public static void main(String[] args) throws Exception {
		
		SinhVien sv1 = new SinhVien(1, "Nguyen van Teo", 5, 6);
		SinhVien sv2 = new SinhVien(2,"Tran van Ti", 6,7);
		SinhVien sv3 = new SinhVien();
		sv3.nhap(); //Hàm nhap() ở trong class SinhVien
		System.out.println(SinhVien.tienDe());
		//System.out.println(sv1 + sv2 + sv3); //báo lỗi ở chỗ sv1 và sv2  (1)
		System.out.println(sv1.toString() + sv2.toString() + sv3); //ok    (2)
	}

}

(1) Tại sao nó lại báo lỗi ở chỗ sv1 và sv2 còn sv3 thì không?
(2)Đã sửa lỗi được nhưng em không hiểu tại sao sv1 và sv2 phải .toString() còn sv3 thì không cần

... viết 20:56 ngày 30/09/2018

Mọi class trong java được tạo ra mặc định kế thừa class Object.

sv3 sử dụng super.toString(), còn sv1 và sv2 sử dụng SinhVien.toString().
Nên class SinhVien cần viết lại method toString().

Cương Nguyễn viết 20:58 ngày 30/09/2018

Nó báo lỗi gì vậy bạn?

Interns viết 21:04 ngày 30/09/2018

nè anh @CuongNguyen

Cương Nguyễn viết 21:01 ngày 30/09/2018

Theo mình thì vấn đề ở đây không phải là hàm toString() nhé.

  • Biểu thức + không dùng được cho 2 Object là kiểu SinhVien, chỉ dùng cho cộng 2 chuỗi String, nếu 1 trong biến là String thì cái còn lại sẽ tự động Cast sang kiểu String:
  • Cơ chết Auto Casting dùng cho String + Object, lúc này Object sẽ gọi hàm toString().
    Ví dụ: Biểu thức “ABC” + sv1 sẽ thành “ABC” + sv1.toString()
    -> đó là sại tao không báo lỗi ở s3

Trong trường hợp của bạn:
System.out.println(sv1 + sv2 + sv3); -> lỗi vì sv1 + sv2 là Object + Object
System.out.println("" + sv1 + sv2 + sv3); -> không lỗi
vì thứ tự sẽ như sau: (("" + sv1) + sv2) + sv3: mỗi lân + đều là String + Object

Bài liên quan
0