定义一个整型变量:
- public class TestDemo{
public static void main (String args[]){
//10是一个整数,不会改变的数,是常量
//程序之中任何一个整数对应的类型都是int
int num = 10;声明一个int型变量
//num是int型变量,2是一个int型的常量=结果还是int型
System.out.println(num2);
}
}
在进行整型数据的操作过程当中也会存在一个数据的溢出问题
- 溢出:当已经达到整型的最大或最小值而继续进行数学计算而可能产生的错误数据。
- 关于变量的命名要求,第一个单词的字母小写,而后的每一个单词首字母大写。
范例:观察数据溢出操作 - public class TestDemo{
public static void main (String args[]){
int maxValue = Integer.MAX_VALUE;//取得最大值
int minValue = Integer.MIN_VALUE;//取得最小值
System.out.println(maxValue);//2147483647
System.out.println(minValue);//-2147483648
//maxValue属于int型变量 + int型=int型(如果再加上下面的输出)
System.out.println(maxValue + 1);/maxValue已经是最大值了,所以数据溢出(最小值)/
System.out.println(minValue - 1 );//-2147483648/同样的,minValue已经是最小值了,数据同样会溢出,变成最大值/
System.out.println(minValue - 2);//-2147483648//如果是最小值减2
发现当已经超出了数据的操作类型,就会产生数据的偏差,最好的方法就是在计算之前预估数据的大小。
- 解决数据溢出的方法:
- 更换更大的数据类型
范例:解决int的数据溢出问题,比int大的数据类型,long
public class TestDemo{
public static void main (String args[]){
int maxValue = Integer.MAX_VALUE;//取得最大值
int minValue = Integer.MIN_VALUE;//取得最小值
long result = maxValue + 1;
System.out.println( result);
}
} - 在使用此类方式的处理之前,一定要注意一个问题,所有的程序的执行顺序都是从“=”的右边到左边。如果继续使用了int来计算,那么计算结果,那么计算结果还是存在一个溢出问题。
实现方式一:直接把int变量的内容直接赋值给long
public class TestDemo{
public static void main (String args[]){
int maxValue = Integer.MAX_VALUE;//取得最大值
int minValue = Integer.MIN_VALUE;//取得最小值
long result = maxValue ;//直接把int变量的内容赋值给long
System.out.println( result +1 );/result是long类型,+1是int类型=long类型/
}
} - 实现方式二:直接将一个int型的变量变为long型
public class TestDemo{
public static void main (String args[]){
int maxValue = Integer.MAX_VALUE;//取得最大值
int minValue = Integer.MIN_VALUE;//取得最小值
long result =(long)maxValue +1;//将一个变量先定义成long型
System.out.println( result );/result是long类型,+1是int类型=long类型/ - 数据类型可以由小变大解决数据溢出问题;数据类型除了可以由小变大之外,还可以实现由大变小。但是这就需要强制完成,强制完成的结果就是:丢数据
- public class TestDemo{
public static void main (String args[]){
/任何的整数默认类型都是int,但是该数据已经超过了int可以保存的数据范围/
//那么我们就需要把这个数据明确的表示成一个long型的常量
long num = 2147483648L;//“L"或“l”都可以
int result = (int)num;/强制long类型变为int类型,这种操作有可能会丢失精度/
System.out.println(result);
}
} - 范围小的数据类型可以自动变为数据大的类型
- 范围大的数据类型必须强制变为数据小的类型
- 关于数据类型默认值问题:
任何的数据类型都有默认值,但是这个默认值在方法的声明中无效。
错误程序:
public class TestDemo{
public static void main (String args[]){
int num;
System.out.println(num);//错误:可能尚未初始化
那么这个时候有两种解决方案: - 在使用前为变量赋值,
public class TestDemo{
public static void main (String args[]){
int num;
num = 10;//在输出前为num赋值
System.out.println(num);//输出结果10
但是这种形式在老版本的JDK中也会出错。
- 在变量声明时赋值
public class TestDemo{
public static void main (String args[]){
int num = 10;
System.out.println(num); - byte数据类型(-128-127)
范例:声明byte变量
public class TestDemo{
public static void main (String args[]){
//10是int,int的范围要大于byte的范围,那么理论上要进行强制转换
//可是这里没有进行转换,因为其数据量符合byte的要求。
byte data = 10;
System.out.println(data);
如果说为byte赋值的内容大于byte的范围,这个时候就要进行强制转换。同时需要注意的是,如果要将int常量直接赋值给byte的变量,那么只能够是常量,而不能是int变量。
网友评论