您的位置:首页 > 编程语言 > Java开发

Java 基础知识(整型数据类型)

2017-12-20 19:34 302 查看

int 数据类型溢出问题

public class Test{
public static void main(String args[]){
int maxValue = Integer.MAX_VALUE; //获取最大值
int minValue = Integer.MIN_VALUE; //获取最小值
int maxTest = maxValue+1;//测试最大值加1
int minTest = minValue-1;//测试最小值减1
int maxTest2 = maxValue+2;//测试最大值加2
System.out.println(maxTest);
System.out.println(minTest);
System.out.println(maxTest2);
}
}


输出的结果是

-2147483648

2147483647

-2147483647

由此可见,当int数据类型溢出时最大值加1会变成最小值,最小值减1会变成最大值。具体原因通过汇编很好理解。

解决方法

将int类型转化为long类型

如果直接执行以下语句会输出什么?

long result = maxValue+1;
System.out.println(result);


结果是:-2147483648,虽然我们已经将result转化为long类型,但是java语言是先执行“=”后的内容,也就是先执行 ”maxValue+1“。此时maxValue仍属于int类型,则还是会出现溢出。

正确的实现方式是

long result = (long)maxValue+1;
System.out.println(result);


先将int类型变量转化为long型,或者将int类型变量先赋值给long型,再进行加减运算。

java中范围小的数据类型可以自动转化为范围大的数据类型,但是范围大的数据类型只有通过强制转化才能变成范围小的数据类型!

ps:java浮点型的数据运算存在个历史bug,以下的代码会输出的结果是什么?

System.out.println(1.1*1.1);


正常理解是会输出1.21,但是编译运行以后得到的结果是:1.2100000000000002
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐