为什么 Java 中打印Object类型的变量无需强转,而从Object类型的数组中取元素却要强转?

news/2025/10/6 20:32:22/文章来源:https://www.cnblogs.com/chanlee/p/19127894

两个奇怪的现象

case1:打印Object对象时,无需强转:

Object val = 25;
System.out.println(val); // 直接打印,输出:25
// 不需要:(String)val 或 (Integer)val

case2:当我们要使用Object 数组中的元素时,需要强转

class Node{int val;Node next;Node(int val){this.val = val;}
}
Object[] pair = new Object[]{23, new Node(5)};
int sum = (Integer) pair[0] + 10;     // 必须强转
Node node = (Node) pair[1];  					// 必须强转
// 不能直接:Node node = pair[1];

对于 case2,当我们不强转的话,编辑器会提示如下错误:

int sum = pair[0] + 10;     // 报错:运算符 '+' 不能应用于 'java. lang. Object'、'int'
Node node = pair[1];  			// 报错:需要的类型:Node 提供的类型:Object

背后的原因

case1不需要强转是因为在调用print语句时,底层实际上已经做了以下操作:

System.out.println(val);↓
public void println(Object obj) {print(String.valueOf(obj));
}↓
public static String valueOf(Object obj) {return (obj == null) ? "null" : obj.toString();
}

可以看到,在调用 print 语句时,会把 Object 类型转换为 String 类型,然后调用这个对象的 toString()方法,(这也就是为什么我们通常需要重写 toString()的原因)

打印方法内部已经帮我们做了类型转换,所以不再需要我们手动强转

那么 case2 为什么不使用强转会报错呢?

由于 java 有编译时类型、运行时类型,前者表示变量在代码中声明时的类型,后者表示变量在程序运行时实际指向的类型

而编译器只能够看到编译时类型,并且由于编译器需要确保类型安全,所以就要阻止类型不匹配的运算

那么 case2 为什么使用了强转就不会报错呢

这是因为,当我们使用强转,就等于告诉编译器,这些变量在运行时是某某类型,由开发者来保证在运行时的类型和强转的类型一致,因此编译器就会根据用户强转后的类型来进行类型检查。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/929674.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

商城网站源代码html5网站模板 免费

定义 考手刹的专业称呼是辅助制动器,与制动器的原理不同,其是采用钢丝拉线连接到后制动蹄上,以对车子进行制动。作用 用于平地斜坡停车时制动,防止车子在无人状态下自动滑跑,逼免发生交通事故。工作原理 其原…

定制开发开源AI智能名片S2B2C商城小程序在无界零售中的应用与行业智能升级示范研究 - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

网站建设样板四平网站建设联系方式

1,背景: 在本地java开发完毕之后,想要打包成docker镜像,方便安装。由于本地没有docker环境,也懒得装了。有一台测试的linux机器可以使用,所以先在本地打包生成xxx.jar,然后拷贝到有docker环境的…

网站主页 优帮云做乡村旅游的网站

<Suspense> 是一个内置组件&#xff0c;用来在组件树中协调对异步依赖的处理。它让我们可以在组件树上层等待下层的多个嵌套异步依赖项解析完成&#xff0c;并可以在等待时渲染一个加载状态。 异步依赖​ 要了解 <Suspense> 所解决的问题和它是如何与异步依赖进行交…

自助企业建站模板网络营销平台的主要功能

构造函数初始化列表以一个冒号开始&#xff0c;接着是以逗号分隔的数据成员列表&#xff0c;每个数据成员后面跟一个放在括号中的初始化式。例如&#xff1a;[cpp] view plaincopyclass CExample { public: int a; float b; //构造函数初始化列表 CExampl…

WinReanimator恶意软件清除指南:详细步骤与工具使用

本文详细介绍了WinReanimator流氓安全程序的危害特征,并提供了使用Malwarebytes Anti-Malware工具进行扫描和清除的完整操作步骤,帮助用户彻底移除该恶意软件及相关感染文件。如何清除WinReanimator(清除指南) 该程…

Git的使用技巧 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

251006

目录JT-JY7T2S1-1JT-JY6T2S1-2FT-(TED&VOAs) JT-JY7T2S1-1Hello, Motor insurance departemnt. Oh, hello, id like to ask about insurace for my car. Yeah, of course, i was just take a few detailes, whats …

2025国庆Day5

模拟赛 T1 枚举b3 n^2 处理出a_b1^a_b2=x的所有情况(满足b2<i) 然后枚举b4,计算答案 #include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> #…

网站建设项目功能需求分析报告wordpress克隆菜单

第一题&#xff1a;打酱油 小明带着 N 元钱去买酱油。 酱油 10 块钱一瓶&#xff0c;商家进行促销&#xff0c;每买 3 瓶送 1 瓶&#xff0c;或者每买 5 瓶送 2 瓶。 请问小明最多可以得到多少瓶酱油。 输入格式 输入的第一行包含一个整数 N&#xff0c;表示小明可用于买酱油的…

南宁京象建站公司江苏威达建设有限公司网站

一&#xff0c;iOS覆盖率报告生成逻辑 iOS覆盖率报告生成与Android有很大的不同&#xff0c;主要的生成逻辑如下&#xff1a; 1&#xff0c;将profraw文件&#xff0c;通过命令xcrun llvm-profdata merge -sparse转换成profdata; 2&#xff0c;再将profdata文件&#xff0c;通…

字节跳动开源图标库:2000+图标一键换肤的魔法 - 教程

字节跳动开源图标库:2000+图标一键换肤的魔法 - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas&qu…

Photoshop启用钢笔绘制图形

Photoshop启用钢笔绘制图形pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", …

代码随想录打卡|Day51 图论(dijkstra(堆优化版)精讲、Bellman_ford 算法精讲) - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

自动化数据操作平台获3000万美元融资

自动化数据操作平台Pantomath获得3000万美元B轮融资,该平台利用AI技术扩展传统数据可观测性功能,通过自主AI代理实现事件自修复,帮助企业减少数据停机时间并提升数据可靠性。自动化数据操作平台Pantomath获3000万美…

常见排序算法详解与C语言实现 - 详解

常见排序算法详解与C语言实现 - 详解2025-10-06 20:00 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !im…

网站开发专业介绍pc开奖网站开发

已在内核代码中添加EmbedSky_hello驱动为例&#xff0c;进行内核编译时候出现了一下几个问题&#xff1a;1、在 /opt/EmbedSky/linux 2.6.30.4/drivers/char目录下修改“Kconfig”文件&#xff0c;添加如下内容&#xff1a;config EmbedSky_HELLOtristate "TQ2440/SKY2440…

南宁网站建设长春网站配图尺寸

在当今数字化金融时代&#xff0c;股票接口成为连接量化交易策略与金融市场的桥梁&#xff0c;为投资者提供了高效、准确的数据获取和交易执行功能。 一、股票接口的基本原理&#xff1a; 股票接口是量化交易系统的核心组成部分&#xff0c;它负责连接投资者的交易程序与金融市…

深入解析:43. 远程分布式测试实现

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

实用指南:【相机基础知识与物体检测】更新中

实用指南:【相机基础知识与物体检测】更新中pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", &qu…