在Java中转换对象的不同方法

Muh*_*man 14 java casting

我知道可以用于投射对象的以下三种方法.

Object o = "str";

String str1 = (String) o;                // Method 1

String str2 = o.toString();              // Method 2

String str3 = String.class.cast(o);      // Method 3
Run Code Online (Sandbox Code Playgroud)
  1. 哪种方法更好,一种方法与其他方法相比有哪些优缺点?
  2. 在内部施放时物体会发生什么?

Jes*_*per 11

你展示的第二种方法不是铸造; 它只是toString()在一个对象上调用方法,这与任何其他方法调用没有什么不同:

String str2 = o.toString();
Run Code Online (Sandbox Code Playgroud)

第一种和第三种方法的效果基本相同.我更喜欢使用第一种方法.

在内部投射时对象发生了什么?

对象没有任何反应.转换不是以某种方式自动将对象从一种类型转换为另一种类型的方式.转换的唯一作用是告诉编译器接受赋值语句而不检查此语句的类型.你对编译器说"我比你更了解这是一个什么样的对象,所以让我做这个任务,不要抱怨这个类型".

在您的示例中,变量的类型oObject.当您分配o给类型的变量时String,编译器将不允许它,因为它检查类型,并且它不能确定o实际上是指String对象.所以你使用强制转换告诉编译器"我知道这是一个String对象,所以让我做这个任务".

仍将检查该类型,但是在运行时,而不是在编译时.如果在运行时,对象的类型不是String,那么你将得到一个ClassCastException.