课时12:整型数据类型
整型数据一共有4种,按照保存的范围由小到大:Byte、Short、Int、Lone,那么在Java里面任何的一个整型常量,其默认的类型都是Int型(只要是整数就是Int类型的数据)。
范例:定义Int型变量
public class JavaDemo { public static void main(String args[]) { //it 变量名称=常量(10是一个常量,整数类型为int); intx=10;// 定义了一个整型变量x //int型变量*int型变量=int型数据 System.out.println(x*x) } }
因此,这就是int类型的基本操作。通过这段代码,大家应该能够发现一些规律。首先,从整体来看,“10”是一个整型常量,它的值永远不会改变。但是为什么它被称为变量呢?10永远不会改变,但是X是一个变量,X的内容是可以发生改变的。
范例:修改X的内容
public class JavaDemo { public static void main(String args[]) { //it 变量名称=常量(10是一个常量,整数类型为int); intx=10;// 定义了一个整型变量x x=20;//改变了x的已有内容 //int型变量*int型变量=int型数据 System.out.println(x*x); } }
任何的数据类型都是有其可以保存的数据范围的。(正常使用下你很少会出现超过此范围的数据),如果真的超过了会如何呢?下面通过一个具体代码来进行观察。
范例:观察超过了int处理范围
public class JavaDemo { public static void main(String args[]) { int max=integer.MAX_VALUE;//获取int的最大值 int min=integer.MIN_VALUE;//获取int的最小值 System.out.println(max);//2147483647 System.out.println(min);//-2147483648 System.out.println(“--------无以言表的分割线--------”); //int型变量+int型常量=int型计算结果 System.out.println(max+1);//-2147483648,最大值+1=最小值 System.out.println(max+2);//-2147483647,最大值+2=次最小值 //int型变量-int型常量=int型计算结果 System.out.println(min-1);//2147483647,最小值-1=最大值 } }
通过此时的执行结果可以发现这些数字在进行处理的时候如果超过了其最大的保存范围,那么将出现有循环的问题,而这样的问题在Java中被称为数据溢出,如果要想解决这种溢出,数据溢出的本质在于操作的数据范围太小了,可以继续扩大使用范围,比Int范围更大的是Long。
范例:解决数据溢出
在操作的时候预估数据范围,如果发现范围不够,就使用更大范围:
public class JavaDemo { public static void main(String args[]) { //long long变量=int的数值 long max=integer.MAX_VALUE;//获取int的最大值 long min=integer.MIN_VALUE;//获取int的最小值System.out.println(max);//2147483647 System.out.println(min);//-2147483648 System.out.println(“--------无以言表的分割线--------”); //long型变量+int型常量=long型计算结果 System.out.println(max+1);//2147483648,最大值+1=最小值 System.out.println(max+2);//2147483649,最大值+2=次最小值 //long型变量-int型常量=long型计算结果 System.out.println(min-1);//-2147483649,最小值-1=最大值 } }
除了可以定义Long型的变量之外,也可以直接在常量上进行处理,
默认的整数常量都是Int的形,那么可以为它追加字母“L”或直接使用“(Long)”转换。
public class JavaDemo { public static void main(String args[]) { int max=integer.MAX_VALUE;//获取int的最大值 int min=integer.MIN_VALUE;//获取int的最小值 System.out.println(max);//2147483647 System.out.println(min);//-2147483648 System.out.println(“--------无以言表的分割线--------”); //int型变量+long型常量=longt型计算结果 System.out.println(max+1L);//-2147483648,最大值+1=最小值 System.out.println(max+2l);//92147483649,最大值+2=次最小值 //long型变量-int型常量=long型计算结果 System.out.println((long)min-1);//-2147483649,最小值-1=最大值 } }
现在发现数据类型之间是可以转换的,即范围小的数据类型可以自动转为范围大的数据类型,但是如果反过来,范围大的数据类型要转为范围小的数据类型,那么就必须采用强制性的处理模式,同时还需要考虑可能带来的数据溢出。
范例:强制类型转换
public class JavaDemo { public static void main(String args[]) { long num=2147483649;//此数据已经超过了int范围 int temp=(int)num;//long范围比int范围大,不能够直接转换 System.out.println(temp); } }
很明显,如果数值范围比 Int 范围大,就不能直接转换,对吗?那么,如果编译时提示“过大的整数”,这是什么意思呢?你的值是否超出了Int的范围?我之前说过, Int 的默认输入类型就是Int。如果超出范围,不能直接赋值,需要加上L来表示长整型。
同学们,我们继续编译。它提示说“不兼容”,类型转换到Int会有损失,明白吗?注意,这里与数值大小无关,即使当前值没有超过Int的范围,它仍然会提示有损失。因为类型转换是基于数据类型划分的。如果真的需要强制转换,就在这里加上( Int )。这意味着强制转换,即使这里的值超出了Int的范围。一旦执行,数据就会溢出。
因此,对于数据的处理操作,我强烈建议大家记住一点: 程序支持有数据转换处理,但是如果不是必须的情况下不建议这种转换。
在进行整型处理的时候,还有一个 Byte 类型特别需要注意,首先这个类型的范围是-128~127之间,也就是说它保存的数据量很小。
范例:定义 Byte 变量
publicclass UavaDemo { public static void main(string args[]){ byte num=20; System.out.println(num); } }
正常来讲在 Java 程序里面20这个数字应该是 Int 型,但是在为Byte 赋值的时候并没有因为是Int型而发生强制类型转换,这是因为 Java 对 Byte 做了特殊处理,即:如果没超过 Byte 范围的常量可以自动由Int变成Byte,如果超过了就必须进行强制转换。
范例:Int的强制转换为Byte
publicclass UavaDemo { public static void main(string args[]){ byte num=(byte)200; System.out.println(num); } }
由于现在200已经超过了 Byte 的范围,所以产生了数据溢出的问题。需要提醒的是,对于常量可以自动适配转换,但是如果对于变量则还是必须使用强制转换处理。
先记住 Byte 的范围,我们通常不会像现在这样直接使用它,但可能会有其他使用方式。因此,这就是我们对整型的处理方式,得出的结论是:优先使用 Int ,在处理大量数据(如时间、文件或内存)时,再考虑使用 Long ,参考我之前提到的原则。