首页 > 解决方案 > Java 类型转换:转换实际上在哪里?

问题描述

我问自己这个:

如果 - 在某些情况下 - 类型根本没有改变,为什么 Java 将其称为类型转换?

让我们看一个简单的例子:

字符串 s = "a";

对象 o = s;

这很好用,因为它是一个扩大的参考转换。但是,在这种情况下,什么都不会被转换。在编译第二个赋值语句时,编译器发现右边的表达式与左边的表达式不同。但这并不意味着编译错误,因为 Object 是 String 的超类型。因此,存储在 s 中的引用被允许存储在 o 中。所以,实际上,这里没有转换任何类型。

或者这是错的?

标签: javatypesreference

解决方案


值得记住的是,这是对sa 的引用String,而不是对 String 的引用。

当您将引用分配给引用时,Object引用的类型会发生变化,但引用和引用的对象保持不变。

由于没有数据被更改,因此没有实际操作来执行此操作。这只会改变编译器检查其值的方式。注意:真正的 CPU 在运行时没有任何检查要执行。对于 CPU,它只是对象的地址。

cf 对于原语,分配给不同的类型会改变数据。


推荐阅读