首页 > 解决方案 > 为什么可以将double值初始化为单词?

问题描述

例如,类是Car

public Car(double speed)

但是你可以初始化它,比如:

Car honda = new Car(speed);

我以为double是小数?

标签: javaclassconstructorinitializationdouble

解决方案


这里有很多误解。

关于这个:

  public Car(double speed) { ... }  // A
  ...
  Car honda = new Car(speed); // B

为什么可以将double值初始化为单词?

speedin 语句B不是“单词” 。(事实上​​,Java 中没有“word”类型。也许您的意思是String?但这不是 a 的示例String。)

事实上,speedin 声明A和语句的出现B都是标识符。在这些上下文中,这些标识符必须是变量的名称。

(它们将是不同speed的变量。speed声明中定义的变量A不会是B. .)

实际上,new Car(speed)意思是:“创建一个Car,将变量的值传递speed给构造函数”。

我们看不到声明中使用的speed变量的声明B。但是,如果代码编译,该speed变量的类型必须与double. 类型要么是double,要么必须可转换为double使用 Java 语言允许的转换之一。(例如,它可以是一个int或一个Double。但不是一个String!)

现在我们可以这样写:

Car honda = new Car("speed");   // incorrect !

这试图将“速度”一词(表示为 a String)传递给Car构造函数。当然是行不通的。Java 不会尝试将字符串转换为数字……而且这个字符串也不是数字。


我以为double是小数?

不,它不是十进制的。十进制表示以 10 为底,Javadouble不是以 10 为底的表示。

实际上,double是一种原始二进制(base 2)浮点类型。

Java 没有任何原始十进制类型(定点或浮点),但有一个称为 Java SE 的类BigDecimal,它是不定精度浮点十进制类型。


推荐阅读