首页 > 解决方案 > 继承[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;)-(只是“引用类型转换”中未使用的不同类型的转换)。

正确的?


标签: javainheritancetypescasting

解决方案


类型转换是指将一种原始数据类型的值分配给另一种类型。

根据规范,这是不正确的。规范指定了一个如下所示的强制转换运算符

(some type) some expression

例如

(float)someDouble

规范还指定这是一个强制转换上下文

W3Schools 所说的“类型转换”是什么意思,规范称为“转换”。转换发生在上下文中。W3Schools 通过“向上转换”和“向下转换”可能意味着“扩大转换”和“缩小转换”。

这个:

double myDouble = myInt;

是从to的转换(许多扩展的原始转换之一),发生在赋值上下文中。没有演员表参与。intdouble

将其与实际演员表进行比较:

(float)myDouble

这是在转换上下文中发生的从double到的转换float(许多缩小的原始转换之一)。

int不,像,double等原始类型float不能从任何东西继承。这些原始转换是规范“硬编码”/强制的,而不是“int继承自double”或类似的结果。


推荐阅读