Java中String类型能够存放多大的数据量?
https://blog.csdn.net/weixin_52707625/article/details/125583678
最近在编写博客系统时,在文章上传遇到了个问题:
- 到底使用什么来接收文章呢?String类型能接收多大的数据量?
随后,我去网上找了一下,发现都是说String只能存放65535个字符
- 啊这?真的是这样吗?我又亲自去编译器试了一遍,还真的是,这可咋整?
- 为此,我去百度了一遍,也没找到啥好的方案,随后,我就想着只能使用流传输了。
- 但是,流传输我也不会呀!!咋办?我就抱着尝试的心态,试了一下使用String来接收
- 你猜咋地,居然成功接收了!!!为什么,居然成功了!!!
- 我上传了七万多个文字,居然能够接收并保存到数据库。啊这?
经过不断的搜索,终于知道原因了
为什么会报错:这是因为jvm编译时允许的String类型最大长度为65535,当超出长度时就会编译失败。
为什么能接收成功?
- 首先,我们要知道String是怎么存储字符串的,String类型其实就是一个char类型的数组,就是使用数组来存放字符。
- 既然是数组,那么它也是有长度限制的,通过String的源码可以知道,String类型的长度就是一个int类型。
- 通过int类型的封装类Integer可以看出,int类型的取值范围为 -231 ~ 231 -1
- 所以理论上是可以存放231 -1个字符,也就是差不多231 - 1 = 2147483647 = 2G,真多。
- 理论上是,但是编译时是通过JVM进行编译的,JVM是存在编译规范的,它对String类型做出了限制,所以,当String类型编译时,不能超过216 个字符。
- 但是,JVM编译规范,跟我运行有什么关系呢?
- 所以,运行时是不受编译规范影响的,运行时拼接或者赋值是根据String的定义范围来做的。