先发代码
public class Yikes{
public static void go(Long n){System.out.print("Long ");}
public static void go(Short n){System.out.print("Short ");}
public static void go(int n){System.out.print("int ");}
public static void main(String args[]){
short y=6;
long z=7;
go(y);
go(z);
}
}
结果是int Long
为什么结果不是Short Long
y难道不是Short类型数据???
public class Yikes{
public static void go(Long n){System.out.print("Long ");}
public static void go(Short n){System.out.print("Short ");}
public static void go(int n){System.out.print("int ");}
public static void main(String args[]){
short y=6;
long z=7;
go(y);
go(z);
}
}
结果是int Long
为什么结果不是Short Long
y难道不是Short类型数据???
解决方案 »
- ============================高智商朋友请帮忙,一首难题。================================
- 读取excel文件并对其数据进行解密(急急急 求各位大虾们帮帮忙)
- 在网络上进行大文件传输,读取数据的缓冲区应该设为多大?
- 当我把同时有.class与原代码的文件夹打包jar时,如何让jar里只有.class文件,而不包含原代码
- 调查portal的情况 比如发展 应用 前途
- 我在run方法里面加入一个设置守护线程的语句 为何报错
- Pattern p = Pattern.compile("[,\\s]+"); 这里 p 是对象吗?
- 非常着急的问题,关于javabean的问题
- 一个24点游戏的算法,急!!!!
- JAVA做三层的问题(高手请进)
- java中用线程动态画图的问题
- 运行jar文件时会出现错误,could not find the main class. program will exit
原因是当short类型变量被使用时他会默认转换成int类型。
正如:
short x = 1;
short y = 1;
short z = x + y;//提示错误:cannot convert from int to short当然也不是所有情况下使用short类型变量都被转化为int类型,比如说赋值:
short x = 1;
short y = x;//ok
public class test2
{
public static void go(Long n)
{
System.out.println("Long");
}
public static void go(Short n)
{
System.out.println("Short");
}
public static void go(int n)
{
System.out.println("int");
}
public static void main(String args[])
{
Short y=6;
Long z= 7L;
go(y);
go(z);
}
}你用这个代码再试一下,就可以得到你想到的结果了。
原因,1楼的朋友也说了。主要是你把short类型和Short类给搞混了。short是基本数据类型,Short是一个Java 类
int a=10;
byte b=a;//会发生编译的错误
byte c=10;//编译能通过
还有就是short int long之间的转换会出现
short s=5;int理论上要强制转换才能变为short
想问问高手
public class Yikes
{
public static void go(Long n)
{
System.out.println("LongLLLLLLLLLLLLLLLLLLLL ");
} public static void go(Short n)
{
System.out.println("ShortSSSSSSSSSSSSSSSSSSSSSSS");
} public static void go(int n)
{
System.out.println("int ");
} public static void main(String args[])
{
Short y = 6;
short k = 8;
long z = 7;
go(y);
go(z);
go(k);
}
}
结果:
ShortSSSSSSSSSSSSSSSSSSSSSSS
LongLLLLLLLLLLLLLLLLLLLL
int 楼主,明白了 吧
楼上的程序很能说明问题啊,顶一个·
public class Yikes{
public static void go(long n){System.out.println("Long ");}
public static void go(short n){System.out.println("Short ");}
public static void go(int n){System.out.println("int ");}
public static void main(String args[]){
int x=5;
short y=6;
long z=7;
go(x);
go(y);
go(z);
go(y+y);//注意此行输出结果
go(x+z);
go(y+z);
}
}
在这里请注意参数类型和main()方法里局部变量的类型,再有 当short类型变量参加运算的时候,哪怕是两个short型变量参加运算,short型也是先自动成长int型在进行运算,结果为int型
这是java的方法调用转换的问题,可以看看我的一点分析。
这是java的方法调用转换的问题,可以看看我的一点分析。
八大基本数据类型的包装类Boolean,Character,Short,Byte,Integer,Long,Float,Double
short,byte,char在进行运算时会自己转化成int型
例如:
byte a=0,b=4;
byte c=a+b;----编译出错
byte c=(byte)(a+b);----- a,b自动转化成int型再运算 以下是基本数据的参数查找优先级
boolean参数查找优先级:boolean,Boolean
short参数查找优先级:short,int,Short
byte参数查找优先级:byte,short,int,long,Byte,float,double
char参数查找优先级:char,int,long,float,double,Character
int参数查找优先级:int,long,float,double,Integer
long参数查找优先级:long,float,double,Long
float参数查找优先级:float,double,Float
double参数查找优先级:double,Double 已经过ISO9001验证
总结:
这些东西不值得深究,转化不了编译器会报错
只要知道short,byte,char进行运算时会自动转化成int就行了
郑重建议:尽量少用基本数据类型的包装类,它会生成两个对象占用更多内存
下面这个贴子和你的问题一模一样:
http://topic.csdn.net/u/20081125/16/7bddfc2b-4031-48e2-ab84-1419d58be83f.html