java中8中基本数据类型,每种数据类型都有不同容量。当大容量数据类型向小容量数据类型进行强制类型转换时可能出现数据溢出。首先先总结一下,java中基本数据类型所在内存大小和能表示的数据范围。
基本类型 | 位数 | 范围 | 默认值 |
byte(字节) | 8 | -128 至 127 | 0 |
shot(短整型) | 16 | -32768 至 32767 | 0 |
int(整型) | 32 | -2147483648至2147483647 | 0 |
long(长整型) | 64 | -2^63至2^63-1 | 0L或0l |
boolean | 1 | 0,1或true,false | false |
char | 8 | \u0000至\uffff | \u0000 |
flaot | |||
double |
每种基本数据类型在java中都有相应的包装类,其中记录相对应基本数据类型的最大值和最小值,并提供了一些方便数据类型转换的接口。
当数据类型进行强制类型转换时,超出了数据表示范围就会出现数据溢出。比如:
int i = 703;
byte b = (byte)i;
System.out.println(b);
打印结果为-65 。之前没有研究过,自以为猜测打印结果应该是127.
正确的解析过程应该是,222二进制表示应该是1010111111(由于i是int32位,所以前面应该很多个0凑集32位),但是byte只有8位容量,最终b=10111111(最左边的两位10被截取了)。 10111111直接转换成十进制是191,并不是-65 .那这个65 又是怎么得到的呢?
计算机的最高为是符号位,0表示正数,1表示负数。当为负数时,转换成十进制需要遵循这样一个规则。
1、首先按位取反,最高位符号位不需要转,10111111->11000000
2、再加1. 为11000001
3、最高位1表示-,1000001转换为十进制为65.所以最终结果为-65
所以当int类型向short、byte类型强制类型转换时出现一些莫名其妙的值时,都可以运用以上的规则进行解析。
相关推荐
java 使用 poi 解析导入大数据量(几万数据量+)时,报出OOM。这是使用POI 第二种处理方法,解决大数据量导入内存溢出问题,并提升效率
java解决大批量数据导出Excel产生内存溢出的方案
poi读取大量数据会造成gc内存溢出的报错,由于垃圾回收机制无法将大量的对象及时的回收,而这些对象又会保存在内存中,会导致内存不够用的情况,这时候我们就需要使用新的方法,读取为cvs即可.此解决方案可支持千万数据的...
解决当内存资源不充足时大数据量的JSON文本解析为JSON对象会导致内存溢出的问题。 基于org.json的部分源代码,以及新增的JsonLazyer类。 原理:用时创建的规则降低传统解析器一次性将文本转成Java对象而占用大量内存...
在开发项目过程中,需要处理算法分析出来二进制流数据,并对数据解析处理转发。我们上层应用平台是使用java开发的,但开放平台是使用c++开发,虽提供给我们对应的.h头文件,但在java中来解析这些数据就显然有些复杂...
该工具类是poi基于事件驱动去读取海量excel数据,解决内存溢出以及空单元格的问题。 该压缩包里面有两个文件,TestExcel.java主要是原始的处理方法,操作简单,适合小数据量的读取。 ExampleEventUserModelUtil.java...
主要介绍了Java中在时间戳计算的过程中遇到的数据溢出问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
采用POI、JXL框架导出CVS文件,支持千万级数据导出,无内存溢出,自己项目中使用中。
在Java技术生态圈中,可以进行Excel处理的主流技术包括:Apache POI,JXL,Alibaba EasyExcel等。由于JXL只支持Excel2003以下版本,所以不太常见。 Apache POI:基于DOM方式进行解析,将文件直接加载内存,所以速度...
该代码可以处理100万数据量的excel文件,xlsx文件数据量太大,用普通的读法会报内存溢出错误,所以用官网提供的方法,一条一条的读取大excel文件,本例子从这点出发,组装excel里读取的单条数据为list,在根据需求...
EasyExcel是一个基于Java的、快速、简洁、解决大文件内存溢出的Excel处理工具。他能让你在不用考虑性能、内存的等因素的情况下,快速完成Excel的读、写等功能。 ** 什么是alibaba-easyexcel? ** EasyExcel是阿里...
下面小编就为大家带来一篇完美解决java读取大文件内存溢出的问题。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
该文档主要介绍java如何操作csv文件,在这里介绍了一个工具包的使用,也黏贴了java对于读取csv文件和写入csv文件时,对于大数据量的处理和安排,有效的解决了处理大数据是内存溢出问题
众所周知,java在处理数据量比较大的时候,加载到内存必然会导致内存溢出,而在一些数据处理中我们不得不去处理海量数据,在做数据处理中,我们常见的手段是分解,压缩,并行,临时文件等方法; 例如,我们要将...
overflowExample.java 演示溢出 precedence.java 演示自加运算符的优先级 primeNumber.java 输出100-200之间的所有素数 ranking.java 评定成绩等级 rankingBySwitch.java 用switch语句评定成绩等级 ...
轻松解决普通poi形式导出Excel的中出现的栈溢出问题,此资源可实现千万级数据分批导出csv文件,csv大数据量导出(千万级别,不会内存溢出),多线程导出 ,生产环境已经很稳定的使用着
java 内存模型 ( java memory model ):根据Java Language Specification中的说明, jvm系统中存在一个主内存(Main Memory或Java Heap Memory),Java中所有对象成员变量都储存在主存中,对于所有线程都是共享的。...
java 内存模型 ( java memory model ):根据Java Language Specification中的说明, jvm系统中存在一个主内存(Main Memory或Java Heap Memory),Java中所有对象成员变量都储存在主存中,对于所有线程都是共享的。...
本人原创文章,分要的多点. 内存溢出与数据库锁表的问题,可以说是开发人员的噩梦,一般的程序...本文以笔者开发和支持的多个项目为例,与大家分享在开发过程中遇到的Java内存溢出和数据库锁表的检测和处理解决过程。