字符串到对象类型转换 - 差异



两者之间有什么区别。

public class Test {
    public static void main(String args[]) {
        String toBeCast = "cast this string";
        A a = toBeCast; // error - Type mismatch: cannot convert from String to A
        Object object = toBeCast;
    }
}

public class A {
}

当我们说每个对象都扩展Object class ,为什么不允许A a = toBeCast;,但这Object object = toBeCast;工作正常。

记住几何课上的那句老话——"每个正方形都是一个矩形,但不是每个矩形都是正方形"。将其推广为:"每个正方形/平行四边形/菱形都是多边形,但不是每个多边形都是正方形/平行四边形/菱形"。

以下是您正在做的事情:

String toBeCast = "cast this string" //this rhombus is a rhombus: cool!
A a = toBeCast; //this parallelogram is that rhombus : WTF? that doesn't make sense!  
Object object = toBeCast; //this polygon is that rhombus: cool! 
  OBJECT
  /    
  A    String
这就是

类层次结构的外观,这就是转换为 Object A 会出错的原因。

变量 toBeCast 是字符串结构的一个实例。变量 a 是类 A 的实例。

可以编译以下内容:

String toBeCast = "cast this string";
Object obj = toBeCast;

这是因为,正如您所说,对象的每个实例(包括字符串)都继承自 System.Object,但以下内容将无法编译:

A a = toBeCast;
虽然 a(类型 A)继承自

System.Object,toBeCast(类型字符串)继承自 Object,但类型 A 不继承自 Type String。

因此,编译器返回:"类型不匹配:无法从字符串转换为 A"。

因为String不是A的子类

查看对象窗口和对象螺钉。它们都是对象,但它们更像是一个对象。还有更多规格来描述两者,因此您知道什么是窗户或螺钉。在编码语言Java中的对象中也是如此。从完全不同的环境中转换类是没有意义的。

字符串也是 Final 并且是不可变的对象。请看一下为什么字符串在 Java 中是最终的?

相关内容

  • 没有找到相关文章

最新更新