public class PrimitiveOverloading {
public static void f(short x) {
System.out.println("f(short)");
}
public static void f(int x) {
System.out.println("f(int)");
}
public static void f(long x) {
System.out.println("f(long)");
}
public static void f(float x) {
System.out.println("f(float)");
}
public static void main(String[] args) {
byte b = 4;
f(b);
}
}
结果怎么是f(short)啊?为什么不是f(int)呢?不理解啊
解决方案 »
- 大家常用的swing界面库有哪些?
- 关于SocketChannel的一个问题
- 关于动态进度条(一个很傻的问题)
- 小弟请教:Java在windows下如何将汉字输出到.txt?先谢了
- JDK路径设置全解 遇到过 java.lang.NoClassDefFoundError 的Java新手请进
- sun.net.ftp.ftpClient中如何删除ftp服务端的文件?
- java多态问题
- 如何设置TOMCAT环境变量?对IE版本有要求么?
- 请教:public interface MyInterface{},界面接口的作用?
- writeObject()写字符串成功,但向量就不行,为什么?
- 深入浅出JAVA SWING源码
- 谁能帮我连接数据库啊
System.out.println("f(float)");
}
他会去匹配这个。。当然 这里没有了。呵呵
先看一下下面的语句那些是非法的。
byte b1=2;
byte b2=1+1;
byte b3=b1+1;
byte b4=b1++;
int i1=Integer.MAX_VALUE+1; //Integer.MAX_VALUE=2147483647
int i2=2147483648;
把byte改为char和short几乎是一样的。
因为整数字面常量是int型的,也就是1和2都是int型的
在赋值语句中直接把一个int型赋给byte肯定是不行的。
int i=1;
byte b=i;
是编译不过的,因为隐性类型转换不允许,改为下面的就可以了
int i=1;
byte b=(byte)i;
隐性转换一般都是放宽转换(如byte到int,String到Object)
但是却有一个例外就是,在赋值转换中,
隐性转换也包含了缩窄基本转换。
就是从int到byte,char,short的转换:
比如:
byte b=1;//合法
byte b=128; //非法
右边必须为int型字面常量,而且值必须能被左边类型表示。
从低到高:byte->char->short->int
byte:一个字节(8位)
short:两个字节(16位)
int:四个字节(32位)(一个字长)
long:八个字节(64位)
float:四个字节(32位)
double:八个字节(64位)
看看这个
System.out.println(Byte.MAX_VALUE);
System.out.println(Character.MAX_VALUE);
System.out.println(Short.MAX_VALUE);
System.out.println(Integer.MAX_VALUE);
System.out.println(Long.MAX_VALUE);
}
127
?
32767
2147483647
9223372036854775807