日期:2014-05-20  浏览次数:20765 次

新手求教java数据类型问题。。
Java code

byte c = 2*2*2*2*2*2*2-1;
short d =2*2*2*2*2*2*2*2*2*2*2*2*2*2*2-1 ;
int e = 2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2-1;
long f=(long)2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2-1;
long g = Long.MAX_VALUE;  
      System.out.println(c);
      System.out.println(d);
      System.out.println(e);
      System.out.println(f);
      System.out.println(g);




遇到这样几个问题:
1. byte、short 在定义的时候如果超出范围就会直接报错,但int、long如果超出范围,写的时候不会报错,运行结果为-1,这是为什么呢;
2.第一个long最大值算法必须要加(long),否则结果也是-1,这里为什么要有强转,如果java默认数据类型是int,那也算是向上转型,应该不需要强转才对。

知道的请说下,谢谢了。

------解决方案--------------------
这跟越界没关系
而是系统自动把超出byte,short范围的数值(数字)自动转换为int类型,所以你要赋值就要强行转换

byte b1 = 5; //合法
byte b2 = 300; //非法,因为系统自动把300当作int来处理,所以要强行转换,即
byte b3 = (byte)300; //要这样转换

------解决方案--------------------
大范围数 可以定义为BigDecimal类型