Java隐式与显式类型转换的区别、代码实现及代码类型判定
Java类型转换相关问题解答
1. 隐式类型转换与显式类型转换的区别
- 隐式类型转换(自动转换):无需手动写转换语法,编译器自动完成。常见场景:
- 基本数据类型中,小范围类型转大范围类型(比如
int转long、float转double),不会损失精度 - 对象类型中,子类对象赋值给父类引用(向上转型),比如
Object obj = new String("test");
- 基本数据类型中,小范围类型转大范围类型(比如
- 显式类型转换(强制转换):必须手动用
(目标类型)语法标注,编译器不会自动执行。常见场景:- 基本数据类型中,大范围类型转小范围类型(比如
long转int、double转float),可能损失精度 - 对象类型中,父类引用转成子类类型(向下转型),这种转换可能抛出
ClassCastException,需确保实际对象是子类类型才行
- 基本数据类型中,大范围类型转小范围类型(比如
2. 同时包含两种转换的最简代码示例
直接看包含两种转换的极简代码:
public class ConvertDemo { public static void main(String[] args) { // 隐式转换:int自动转double int num = 15; double doubleVal = num; // 显式转换:double强制转int int convertedVal = (int) doubleVal; // 对象转型的组合示例 // 隐式向上转型:子类转父类 Object obj = new StringBuilder("demo"); // 显式向下转型:父类转子类 StringBuilder sb = (StringBuilder) obj; } }
这段代码同时覆盖了基本类型和对象类型的两种转换逻辑,足够简单直观。
3. 给定代码的类型转换判定
先看目标代码:
Graphic g = getGraphics(); Graphics2D g2 = (Graphics2D) g; g2.setStroke(new BasicStroke(5));
这里的核心转换是第二行Graphics2D g2 = (Graphics2D) g;,属于显式类型转换:
g是Graphic(大概率是Graphics的笔误)类型的父类引用,要转成子类Graphics2D类型,必须手动添加(Graphics2D)强制转换符,完全符合显式转换的特征。- 第一行
Graphic g = getGraphics();如果getGraphics()返回的是Graphics2D实例,属于隐式向上转型,但代码中最明确的转换操作是第二行的显式强制转换。
内容的提问来源于stack exchange,提问作者Print Yo
相关产品推荐
相关产品推荐

