【问题标题】:Why can a double value be initialized as a word? [closed]为什么可以将double值初始化为单词? [关闭]
【发布时间】:2020-03-22 05:39:44
【问题描述】:

比如类是Car:

public Car(double speed)

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

Car honda = new Car(speed);

我以为double 是小数?

【问题讨论】:

  • speed 可以是 double 变量。在这种情况下,您可以使用它而不是像 90.25 这样的 double 文字(想想 double speed = 90.25; honda = new Car(speed);
  • double 是浮点数。这是非常基本的。这里没有“词”。可能您的意思是“变量”,这也是非常基本的。
  • 你需要给我们完整的上下文,最好是a Minimal, Reproducible Example。当我将您的初始化粘贴到我的 Eclipse (IDE) 中时,我得到 速度无法解析为变量,这显然不会发生在您身上。
  • 我建议您一边学习一边练习 Java 教程。每当我学习编程语言时,我都会从头开始阅读教程或书籍。在需要了解构造函数调用之前,您应该已经了解了标识符及其声明。

标签: java class constructor initialization double


【解决方案1】:

这里有不少误解。

关于这个:

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

为什么双精度值可以初始化为单词?

声明B 中的speed 不是“单词”。 (实际上,Java 中没有“word”类型。也许您的意思是 String?但这也不是 String 的示例。)

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

(它们将是不同的speed 变量。声明A 中定义的speed 变量不会是B 中使用的变量。没关系。在Java 中,相同name 可以用于不同的事物,前提是在各自的上下文中声明了名称。)

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

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

现在我们可以这样写了:

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

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


我以为double 是小数?

没有。它不是十进制的。十进制表示以 10 为底,而 Java double 不是以 10 为底的表示。

其实double是一个原始二进制(以2为底)浮点类型。

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

【讨论】:

    猜你喜欢
    • 2017-04-03
    • 2014-11-14
    • 2012-04-22
    • 2011-12-23
    • 1970-01-01
    • 2016-05-10
    • 2018-10-13
    • 2016-08-26
    相关资源
    最近更新 更多