java - 继承[Java]中类型转换和向上/向下转换之间的区别?
问题描述
我们知道以下内容:: (编辑 20210101_0059 EST)
public class Main {
public static void main(String[] args) {
int myInt = 9;
double myDouble = (double) myInt; // casting: int to double
}
}
类型转换是指将一种原始数据类型的值分配给另一种类型。
扩大铸造(自动)-将较小的类型转换为较大的类型大小字节->短->字符->整数->长->浮点->双 https://www.w3schools.com/java/java_type_casting.asp
问题::
类型转换和向上转换/向下转换有什么区别?类型转换如何工作?
在这个例子中是向上转换吗?如果是这样,这是否意味着整数从 double 继承?(我不这么认为)
更新低于 20210101_0059~0154 EST
我换行
double myDouble = myInt; // casting: int to double
// change to >>
double myDouble = (double) myInt; // casting: int to double
因为我的意图是谈论选角。这个错误导致人们开始谈论类型转换而不是强制转换。
到目前为止,根据答案,我知道 Java 语言规范中没有向上/向下转换。我简要浏览了5.5。铸造上下文和 5.5.1。引用类型转换
问题::
那么,究竟什么是铸件?“铸造”基本上只是“类型转换”吗?
并且有很多类型的转换(/类型转换)对吗?
问题(确认) ::
1.因此,超类和子类之间没有必要存在转换(即:转换不仅存在于具有继承关系的2个类中),对吗?
2. 通常,当我们谈论向上/向下转换时,我们在“引用类型转换”中使用它。但在我们的例子double myDouble = (double) myInt;
中,没有向上/向下转换。而且,在这两种情况下,铸件(上/下铸件和 int-double 铸件)只是“类型转换”。正确的?
3.简而言之,它们之间的唯一区别就是:
类型铸造——铸造的总称。
向上/向下转换——这个术语仅在“引用类型转换”中使用,它涉及继承。
转换“byte short char int long float double”(例如:double myDouble = (double) myInt;
)-(只是“引用类型转换”中未使用的不同类型的转换)。
正确的?
解决方案
类型转换是指将一种原始数据类型的值分配给另一种类型。
根据规范,这是不正确的。规范指定了一个如下所示的强制转换运算符:
(some type) some expression
例如
(float)someDouble
规范还指定这是一个强制转换上下文。
W3Schools 所说的“类型转换”是什么意思,规范称为“转换”。转换发生在上下文中。W3Schools 通过“向上转换”和“向下转换”可能意味着“扩大转换”和“缩小转换”。
这个:
double myDouble = myInt;
是从to的转换(许多扩展的原始转换之一),发生在赋值上下文中。没有演员表参与。int
double
将其与实际演员表进行比较:
(float)myDouble
这是在转换上下文中发生的从double
到的转换float
(许多缩小的原始转换之一)。
int
不,像,double
等原始类型float
不能从任何东西继承。这些原始转换是规范“硬编码”/强制的,而不是“int
继承自double
”或类似的结果。
推荐阅读
- selenium - 通过选项 add_argument 使用 Selenium 更改 Firefox 的用户代理?
- python - 如何删除初始迁移依赖的库?
- django - Django如何在表单的错误消息中更改自定义用户模型的名称
- python - 如何使用包含标题的 CSV 文件运行 Matplotlib
- java - 不满足的依赖异常(Springboot)
- android - 如何将主要活动 FAB 禁用到另一个片段中?
- c# - UWP 中的反应式 UI 用户控件
- haskell - Haskell:多个字符串之间的所有组合
- javascript - 如何在 Material-UI 对话框模式中使用 react-infinite-scroll-component?
- jupyter-notebook - 双击.ipynb文件时如何打开Jupyter实验室