class MyClass {
void myMethod(byte b) {
System.out.print("myMethod1");
}
public static void main(String [] args) {
MyClass me = new MyClass();
me.myMethod(12);
}
}
我理解myMethod()
的参数是int
字面值,参数b
是字节类型,此代码会生成编译时错误。 (可以通过对参数使用显式字节转换来避免:myMethod((byte)12)
)
class MyClass{
byte myMethod() {
return 12;
}
public static void main(String [ ] args) {
MyClass me = new MyClass();
me.myMethod();
}
}
在遇到这种情况之后,我预计上面的代码也会产生编译时错误,因为12是int
文字并且返回类型myMethod()
是字节。但是没有发生这样的错误。 (不需要明确演员:return (byte)12;
)
感谢。
答案 0 :(得分:11)
Java在这种情况下支持缩小范围。来自{{3>} 分配转换:
如果类型为,则可以使用缩小的基元转换 变量是
byte
,short
或char
,以及常量的值 表达式可以在变量的类型中表示。
答案 1 :(得分:2)
答案 2 :(得分:0)
只要值在范围内,这将有效byte b = 4
,但如果您尝试byte b = 2000
之类的内容,则会出现编译错误,因为它超出了范围。 12
在范围内,因此您不会收到错误。