【发布时间】:2015-05-21 08:40:32
【问题描述】:
在我的选角课上,老师教给我们一个有趣的事实如下。
class Casting {
public static void main(String args[]){
int i = 10;
byte b = i;
System.out.println(b);
}
}
我们遇到了一个错误
java:5: possible loss of precision
然后我们改代码如下
class Casting1 {
public static void main(String args[]){
final int i = 10;
byte b = i;
System.out.println(10);
}
}
10
我们得到了正确的输出。至于原因,他告诉我们,当我们修改变量final 时,该变量会以尽可能小的数据类型存储。在这种情况下是byte。这就是我们能够在不使用 cast 关键字的情况下进行转换的原因。
但是当我们像这样使用方法重载时,
class A {
void m(int i){
System.out.println("int");
}
void m(byte b){
System.out.println("byte");
}
public static void main(String args[]){
A a1 = new A();
final int i = 10;
a1.m(i);
}
}
我得到了输出int。如果最终变量以可能的最低数据类型存储,则应为byte。所以我在没有重载的情况下尝试了以下代码。
class A {
void m(byte b){
System.out.println("byte");
}
public static void main(String args[]){
A a1 = new A();
final int i = 10;
a1.m(i);
}
}
java:9: m(byte) in A cannot be applied to (int)
这是什么原因?我有什么误解吗?
【问题讨论】:
-
在带有 final 的示例中,您将常量 10 传递给 println。可能应该是b。你应该检查你的代码中是否存在这个错字,也许它会改变结果?
-
第一个示例给了我一个编译错误:类型不匹配:无法从 int 转换为字节。第二个例子(最终)通过编译
-
@sharonbn 是的,它应该是这样的。我已经提到我收到一个错误
标签: java casting overloading