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

标签 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
  1. 哪种方法更好,一种方法与其他方法相比的优缺点是什么?
  2. 在内部施法期间对象发生了什么?

最佳答案

您展示的第二种方法不是转换;它只是在对象上调用 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/

相关文章:

java - 在加工过程中制作旋转螺旋?

java - 正则表达式验证字符串

python - Python 如何确定将某些内容转换为哪种类型?

c++ - 如何在 C++ 中将复杂的<float>变量转换为 float ?

c - 用8位指针写入,用32位指针读取

c - 在初始化 `float` 时转换为 `f` 和添加 `float` 作为后缀有什么区别?

matlab - Matlab中同时涉及单双矩阵时的内存和速度问题

java - 工厂构造函数中的参数太多是否有代码异味?

java - RMI 与 REST 服务

java - 在具有卡片布局的 JPanel 中的两个 JPanel 之间交换