【问题标题】:Java overloading int to longJava将int重载为long
【发布时间】:2019-05-23 00:46:10
【问题描述】:

参考Java overloading - long and float,其中提到了 JLS #15 中的规则

以下规则定义了 原始类型:

双 >1 浮点数

浮点数 >1 长

long >1 int

int >1 个字符

int >1 短

短 >1 字节

其中“S >1 T”表示“T 是 S 的直接子类型”,根据 JLS #4.10 就在这部分的正上方。

为什么下面的代码打印出来是浮动的?

int q = 2;
a(q);

void b(long a) {
        System.out.println("long");
}

void a(float a) {
        System.out.println("float");
}

【问题讨论】:

  • 您是否希望这两种方法具有相同的名称?

标签: java type-conversion overloading


【解决方案1】:

只有 1 个名为 a 的方法接受浮点参数,

Java 支持从floatint 的关系(直接超类型关系)(在中间使用long):

float > long -> int

如果您将方法b 重命名为a,您将按预期执行带有long 的方法

void a(long a) {
        System.out.println("long");
}

【讨论】:

  • 为什么转换没有停止很长时间?如果有 static void c(double c) { System.out.println("double"); },结果不是“double”,而是“float”
猜你喜欢
  • 2020-11-21
  • 1970-01-01
  • 2015-04-27
  • 1970-01-01
  • 2010-11-21
  • 1970-01-01
  • 1970-01-01
  • 2011-08-25
  • 2017-07-17
相关资源
最近更新 更多