美文网首页
String的最大长度是多长

String的最大长度是多长

作者: 眼角的伤痕 | 来源:发表于2020-04-03 10:50 被阅读0次

  初看到这个问题心里还是有点尴尬的,平时确实没注意过String最大能有多长。想要知道String到底有多长,只能从源码层面来找答案了。
  Java中String不是基本数据类型,而是引用类型并且是final。String定义为final的原因:
  高效性
  JVM在查找字符串的时候可以直接定位到String类中,更准确的说String不可变,才能实现常量池。
  安全性
  定义成final,不能被继承和修改,可以防止在子类或者其他地方被修改,导致隐藏Bug产生。
  上面提到常量池,JVM创建对象是需要开销的,为了提高性能,对字符串使用字符串常量池进行了优化,每当我们创建一个字符串时,Jvm先去字符串常量池检查,如果字符串常量池存在,直接返回实例引用;否则创建实例,并存入字符串常量池中。
  比如常见的判断:

String a="hello";
String b="hello";

因为a和b都是指向"hello"这个常量池中的常量,即同一个地址所以a==b 为true

String c=new String("hello");

因为c是new了一个新对象,且对象是在堆上存放,所以c==a为false,虽然c的内容是创建在堆中,但是他的内部value还是指向JVM常量池的hello的value,它构造hello时所用的参数依然是hello字符串常量。


a、b、c内存关系(图片来源见水印)

  下面正式进入今天的主题了,String的最大长度到底是多大呢?
  翻开String类的源码,你会看到:

  // private final char value[];
    private final int count;

 public int length() {
        final boolean STRING_COMPRESSION_ENABLED = true;
        if (STRING_COMPRESSION_ENABLED) {
            // For the compression purposes (save the characters as 8-bit if all characters
            // are ASCII), the least significant bit of "count" is used as the compression flag.
            return (count >>> 1);
        } else {
            return count;
        }
    }

可以看到String的length是通过count值返回的,count是int型,最大为231-1,所以String理论上最大长度为231-1,2147483647。
但是由于String底层是通过char[]字符数组来实现,char占用两个字节,2147483647 个 char 类型就是 4294967294 字节,这接近于 4GB 大小,想要申请这么一大块连续的内存空间,失败也就不足为奇了,所以和电脑的硬件条件有关。
  总结
  String 的最大长度也就是字符数组的最大长度,理论上最大长度为 int 类型的最大值,即 2147483647。
  在实际中,一般可获取的最大值小于理论最大值。

相关文章

  • String的最大长度是多长

      初看到这个问题心里还是有点尴尬的,平时确实没注意过String最大能有多长。想要知道String到底有多长,只...

  • String的最大长度

    create at 20211016,modify at 常量池中的字符串 这样定义的字符串会存入常量池,字符串最...

  • C++字符串

    string.length()获得当前串的长度。 string.max_size()获得字符串支持的最大长度。 s...

  • 最大的 String 字符长度是多少?

    String 类可以说是在 Java 中使用最频繁的类了,就算是刚刚接触 Java 的初学者也不会陌生,因为对于 ...

  • Longest Absolute File Path

    题目来源给一个string,求最长路径。主要在于记录当前是第几层,前几层一共多长长度,是否是文件之类的。

  • String长度限制

    String长度有限制吗?是多少? Java中String是有长度限制的,在JVM编译中还有规范。String其实...

  • mysql 字段

    String 及文本 char定长,最大只有256bytes。存入内容长度大于指定长度,严格模式报错,否则截取定长...

  • 给你三分钟能干嘛?可以知道String的长度限制是多少!

    前言 话说 Java 中 String 是有长度限制的,听到这里很多人不禁要问,String 还有长度限制? 是的...

  • Java中的String长度最大是多少

    https://mp.weixin.qq.com/s/I16BlY9cJF-JZZReAjuRqg

  • nanopb关于string类型的处理

    在nanopb中,string类型在生成c语言文件的时候,会有两种结构,一种是指定了最大长度的,一种是没有指定最大...

网友评论

      本文标题:String的最大长度是多长

      本文链接:https://www.haomeiwen.com/subject/armcphtx.html