*java* 在Java中给Int类型的最大值+1 ,以及int与byte之前强转的例子

1.给int最大值+1

public class Test1{
	public static void main(String[] args){
		//保存当前int的最大值,同理也有long maxValue
		int maxValue = Integer.MAX_VALUE+1;
		int minValue = Integer.MIN_VALUE+1;
		System.out.println(maxValue);
		System.out.println(minValue);
	}
}

给最大值+1或者给最小值-1,我们可以发现数据产生了溢出,因为超过了int的存储范围(2^31-1),如果我们把它换成long型是否就可以了呢?看看结果

public class Test1{
	public static void main(String[] args){
		//保存当前int的最大值,同理也有long maxValue
		long maxValue = Integer.MAX_VALUE+1;
		long minValue = Integer.MIN_VALUE+1;
		System.out.println(maxValue);
		System.out.println(minValue);
	}
}

运行发现结果还是溢出了,这是因为我们程序在运行时,是从右向左读的,等号右边的Integer.MAX_VALUE是int类型的变量,1是int类型的常量(Java中所有整型常量默认类型都是int),两个Int类型的数相加,结果自然还是Int类型,我们虽然给maxValue赋为long型,此时已经没有作用。因此我们需要给等号右边的数进行强转转换。代码如下:

public class Test1{
	public static void main(String[] args){
		long maxValue = Integer.MAX_VALUE+1L;		//在整型常量后加上字母L表示常量当前为long类型
		long minValue = (long)Integer.MIN_VALUE-1;  //将最小值强行类型声明为long型
		System.out.println(maxValue);			    //严格来讲不是强制类型转换										         //Java中的强转指的是大类型转为小类型	
		System.out.println(minValue);				//java中的强转指的是大类型转为小类型            
		}
}

在Java中小的数据类型与大的数据类型做数据运算时,小的数据类型会自动转换为大的数据类型。
eg:10+1L
大的数据类型转换为小的数据类型时必须强转,强转可能会丢失数据。

public class Test1{
	public static void main(String[] args){
		long maxValue = Integer.MAX_VALUE+1L;
		int num = (int)maxValue;  //将long强转成int
		System.out.println(num);
	}
}

2.int与Byte之间的强转
先来看一段代码,看看有没有问题。

public class Test1{
	public static void main(String[] args){
		byte b1 = 120;
		System.out.println(b1);
	}
}

等式从右向左,120为整型常量,默认为Int型,而b1是byte型,应该需要强转,看看运行结果。

在Java中,整型常量若在byte类型的保存范围之内(-128~127),可以直接赋值给byte变量,无需强转。若超过范围则会溢出。

若是一个整型变量在byte类型的保存范围内,将其赋值给byte,再看看结果。

public class Test1{
	public static void main(String[] args){
		int b = 120;  //将整型变量赋值给byte
		byte b1 = b;
		System.out.println(b1);
	}
}

若整型常量值超出byte范围必须强转,整型变量无论值是否在byte范围中,都需要强转。其他类型的数值,无论是否在范围内,都需要强转。

猜你喜欢

转载自blog.csdn.net/qq_43232778/article/details/84233544
今日推荐