instanceof
được sử dụng để xác định thời gian chạy kiểu của đối tượng. Bạn đang cố gắng xác định xem x
thực sự là đối tượng của loại J
khi chương trình đang chạy, do đó, nó biên dịch.
Bạn có nghĩ rằng nó sẽ dẫn đến lỗi biên dịch vì bạn nghĩ trình biên dịch không biết loại của x
?
Sửa
Như Kirk Woll đã comment (nhờ Kirk Woll!), Nếu bạn đang kiểm tra nếu x
là một instanceof
một lớp bê tông, và trình biên dịch có thể xác định x
's loại, sau đó bạn sẽ nhận được một lỗi tại thời gian biên dịch.
Từ ngôn ngữ Java Specification:
Nếu một dàn diễn viên của RelationalExpression đến ReferenceType sẽ bị từ chối là một lỗi thời gian biên dịch, thì biểu thức quan hệ instanceof tương tự như vậy tạo ra một lỗi thời gian biên dịch. Trong tình huống như vậy, kết quả của biểu thức instanceof không bao giờ có thể đúng.
Như một ví dụ về điều này:
import java.io.Serializable;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.io.ObjectInputStream;
class SerializableClass implements Serializable
{
private writeObject(ObjectOutputStream out) {}
private readObject(ObjectInputStream in) {}
}
public class DerivedSerializableClass extends SerializableClass
{
public static void main(String[] args)
{
DerivedSerializableClass dsc = new DerivedSerializableClass();
if (dsc instanceof DerivedSerializableClass) {} // fine
if (dsc instanceof Serializable) {} // fine because check is done at runtime
if (dsc instanceof String) {} // error because compiler knows dsc has no derivation from String in the hierarchy
Object o = (Object)dsc;
if (o instanceof DerivedSerializableClass) {} // fine because you made it Object, so runtime determination is necessary
}
}
Lưu ý phụ - xin đừng quên thêm thẻ cho ngôn ngữ. Tôi đã thêm "java" cho bạn. – EboMike
xin lỗi tôi cần có – user439526