Java 基本类型 long 的一些使用陷阱
来源:互联网 发布:无缝贴图软件 编辑:程序博客网 时间:2024/05/16 14:29
在java 中byte 占用一个字节,shot 占用两个字节,char 使用的是unicode编码,占用两个字节,int 占用四个字节,long 占用八个字节
在使用long 的时候,有个地方一定要注意,java 虚拟机默认把程序里出现的常量数字当做是int型。因此,如果想定义一个大于2^31(2147483648)的整数时,
如果直接使用long var = 数字常量(数字常量大于等于2^31),结果达不到实际效果,实际上,此时的var 的值为溢出后的值。看几个例子。
1. long var = 1<<31;System.out.println(var); 打印结果为 -2147483648,1<<32 实际上溢出了,成为了负数,因为java虚拟机把1当成int型,然后对int型的1,左移31位,
导致结果溢出,至于为什么是-2147483648 很简单明了
2.long var = 2147483648; System.out.println(var); 编译不通过,JIT 编译器直接识别出 2147483648 这个数字常量大于有符号整数所能表示的最大范围的。
3.long var = 0x80000000; System.out.println(var); 打印结果为 -2147483648 ,原因和1 一样的,java虚拟机把0x80000000,当成了int型的数,因此结果溢出
4.long var = ((long)1)<<31; System.out.println(var); 打印结果为 2147483648 ,符合预期结果。例子4和例子1的区别在于在移位操作前,先把int 型的1转换为了long类型。这样后续进行的移位操作就是long类型的移位操作了,结果不会溢出。
java 虚拟机的这个特点,使得我们不能用数字常量直接定义一个大于Integer.MAX_VALUE变量,这点很容易出错。
- Java 基本类型 long 的一些使用陷阱
- Long类型比较的陷阱
- Long类型比较的陷阱
- 总结了一些java基本的一些陷阱
- Java中的String和Date、Timestamp之间的转换+long类型的陷阱
- 【Java】基本类型之long(六)
- [java]1、Long对象与long基本类型
- Java基本类型与C++基本类型的一些比较
- Java基本类型的一些总结
- Java基本类型的一些问题探讨
- long类型字段的使用
- Java中使用long类型实现精确的四则运算
- java中Long类型和long类型的大小比较
- Java表达式的陷阱——表达式类型的陷阱
- static Class<Long>Long.TYPE 表示基本类型 long 的 Class 实例。
- unsigned long int 的陷阱
- c/c++ 使用比long long还大的类型
- java基本类型以及java的一些基本知识
- POJ - 2785 4 Values whose Sum is 0(二分搜索)
- POJ2752 Seek the Name, Seek the Fame(kmp)
- JS点名神器
- php获取内容中的所有图片
- POJ3461 Oulipo(kmp)
- Java 基本类型 long 的一些使用陷阱
- IOS HTTP GET POST学习笔记
- 迅雷 API 接口说明文档 -调用迅雷自动下载
- HTTP协议规定的 - URL中的保留字符
- 手势识别器
- Unity的Socket通讯_3_粘包丢包
- scanf不判断是否读到EOF导致 output limit exceed
- *LeetCode-Scramble String
- FZU 2198 快来快来数一数 (dp + 矩阵快速幂)