Java中String类型能够存放多大的数据量?编译器只支持String只能存放65535个字符,运行时可用是int长度远比65535个多

发布时间 2023-06-14 19:08:21作者: sunny123456

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的定义范围来做的。

个人理解,如有不到位或错误的地方,欢迎纠正?