我知道以下三种可用于转换对象的方法。
Object o = "str";
String str1 = (String) o; // Method 1
String str2 = o.toString(); // Method 2
String str3 = String.class.cast(o); // Method 3
- 哪种方法更好,一种方法与其他方法相比的优缺点是什么?
- 在内部施法期间对象发生了什么?
最佳答案
您展示的第二种方法不是转换;它只是在对象上调用 toString()
方法,这与任何其他方法调用没有什么不同:
String str2 = o.toString();
第一种和第三种方法的效果本质上是一样的。我更愿意使用第一种方法。
What happened with object on the time of casting internally?
对象没有任何反应。转换不是一种以某种方式自动将对象从一种类型转换为另一种类型的方法。强制转换所做的唯一一件事就是告诉编译器接受赋值语句而不检查该语句的类型。你是在对编译器说“我比你更清楚这是什么类型的对象,所以让我做这个赋值,不要提示类型”。
在您的示例中,变量o
的类型是Object
。当您将 o
分配给类型为 String
的变量时,编译器将不允许这样做,因为它会检查类型,并且无法确定 o
实际上指的是一个 String
对象。所以你使用强制转换告诉编译器“我知道这是一个 String
对象,所以让我做这个赋值”。
类型仍然会被检查,但在运行时,而不是在编译时。如果在运行时对象的类型不是 String
,您将得到一个 ClassCastException
。
关于java - 在 Java 中转换对象的不同方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30661075/