java - 无法将 java.lang.Integer 转换为 int

标签 java reflection casting

我对以下 Java 代码感到困惑,其中我尝试使用两种方法将 Object 转换为 int:

Object o = 1;
System.out.println((int) o);
Class <?> t = int.class;
System.out.println(t.cast(o));

第二行转换 Objectint传统上,并成功。然而,第四个,我希望它在功能上是等效的,会抛出

Exception in thread "main" java.lang.ClassCastException: Cannot cast java.lang.Integer to int

第二行和第四行在功能上有什么区别?为什么一个失败而另一个成功?

最佳答案

Object o = 1;
System.out.println((int) o);

通过这两行代码,你就遇到了装箱和拆箱。第一行将 int 值 1 隐式转换为 Integer 对象。 o 被分配了对此对象的引用。这种隐式转换称为装箱。

在第二行,o 引用的 Integer 对象被取消装箱为 int,可以将其强制转换为 int .

关于java - 无法将 java.lang.Integer 转换为 int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48361095/

相关文章:

java - 如何忽略 java 中的标点符号和空格?

java - 使用 Jsoup 获取第 n 个子元素

java - 如何从未知大小的字符串中获取数字 (Java)

java - 如何正确使用Joda-Time Instant方法

java - 如何在简单的 Spring Boot 应用程序中 Autowiring 扩展 CrudRepository 的存储库?

java - 在 playframework Controller 中调用静态函数时验证错误

reflection - ASP.NET MVC - 使用反射来查找 Controller 是否存在

c# - 在运行时创建数组类型

java - 为什么 Java 的 +=、-=、*=、/= 复合赋值运算符不需要强制转换?

swift - 如何快速将 sockaddr_in 转换为 sockaddr