点击上方“武培轩”,选择“设为星标”

技术文章第一时间送达!

String 类可以说是在 Java 中使用最频繁的类了,就算是刚刚接触 Java 的初学者也不会陌生,因为对于 Java 程序来说,main 方法就是使用一个 String 类型数组来作为参数的(String[] args)。对于这样一个频繁使用的类,String 字符串可以有多长呢?十万字符?一百万字符?还是无限的呢?

要弄清楚 String 的最大长度,首先应该了解 String 类的内部实现。在 String 类中,是使用一个字符数组来维护字符序列的,其声明如下:

private final char value[];

这也就是说,String 的最大长度取决于字符数组的最大长度,我们知道,在指定数组长度的时候,可以使用 byte、short、char、int 类型,而不能够使用 long 类型。这也就是说,数组的最大长度就是 int 类型的最大值,即 0x7fffffff,十进制就是 2147483647,同理,这也就是 String 所能容纳的最大字符数量。

而且,我们来看下 java.lang.String#length() 源码:

public int length() {    return value.length;}

可以看出获得 String 对象长度的 length 方法返回值是 int 类型的,而不是 long 类型的,也是因为这个原因。

不过,这个最大值只是在理论上能够达到的值,在我们实际的使用中,一般情况下获得的最大长度比理论值要小。下面我们写一个最简单的程序来看。

/** * @author wupx * @date 2020/01/13 */public class StringTest {    public static void main(String[] args) {        char[] c = new char[Integer.MAX_VALUE];    }}

运行这个程序,在通常情况下,都会产生如下的错误:

Exception in thread "main" java.lang.OutOfMemoryError: Requested array size exceeds VM limit  at test.StringTest.main(StringTest.java:9)

产生这个错误的原因就是内存溢出,也就是系统无法分配这么大的内存空间所致。计算一下,一个 char 类型占用 2 字节,2147483647 个 char 类型就是 4294967294 字节,这接近于 4GB 大小,想要申请这么一大块连续的内存空间,失败也就不足为奇了。

那么,到底我们所用的计算机能够承受多大的字符数组呢,这跟软件与硬件等诸多因素都有关,我们可以编写程序来获得可申请最大字符数组的近似值。

/** * @author wupx * @date 2020/01/13 */public class StringTest {    public static void main(String[] args) {        for (int i = 0; i < 100; i++) {            int len = Integer.MAX_VALUE - i;            try {                char[] ch = new char[len];                System.out.println("len: " + len + " OK");            } catch (Error e) {                System.out.println("len: " + len + " " + e);            }        }    }}

运行结果如下:

len: 2147483647 java.lang.OutOfMemoryError: Requested array size exceeds VM limitlen: 2147483646 java.lang.OutOfMemoryError: Requested array size exceeds VM limitlen: 2147483645 OKlen: 2147483644 OKlen: 2147483643 OK

根据运行结果可以看出 String 的最大长度为 Integer.MAX_VALUE - 2 或 2 ^ 31 - 3。

总结

在 String 类内部,是使用一个字符数组(char[])来维护字符序列的。

String 的最大长度也就是字符数组的最大长度,理论上最大长度为 int 类型的最大值,即 2147483647。

在实际中,一般可获取的最大值小于理论最大值,在我的电脑上得出的最大值是 2 ^ 31 - 3,大家可以在自己的电脑上测试下。

   ●你真的了解 volatile 关键字吗?●Java中Set集合是如何实现添加元素保证不重复的?●为什么不建议使用Date,而是使用Java8新的时间和日期API?

c 获取char*的长度_最大的 String 字符长度是多少?相关推荐

  1. java sessionid长度_设置TOMCAT SESSIONID 字符长度和生成算法

    修改TOMCAT 默认的生成SESSION ID的算法和字符长度非常简单,只需修改context.xml中的标签值,比如: sessionIdLength="20" pathnam ...

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

    String 类可以说是在 Java 中使用最频繁的类了,就算是刚刚接触 Java 的初学者也不会陌生,因为对于 Java 程序来说,main 方法就是使用一个 String 类型数组来作为参数的(S ...

  3. 设计登录页面测试用例,页面包括账号、密码和验证码,账号字符长度小于20,密码字符长度小于30,验证码数字和字母组合,长度为4

    1. 正确输入账号.密码和验证码,登录成功. 2. 账号为空,应提示"请输入账号". 3. 账号长度为19个字符,符合要求. 4. 账号长度为20个字符,符合要求. 5. 账号长度 ...

  4. mysql signed 长度_浅谈mysql字段长度设置

    mysql 中最常用的数据类型是tinyint,smallint,int,bigint,char,varchar; char(n)和varchar(n)存储固定长度的字符数据,长度最大为254字节.使 ...

  5. mysql中char存储中文_数据库中的字符类型存储字符和汉字的数量

    sqlServer2012(936 简体中文GBK )为例: 例如: varchar(10),只能存储10个英文字符或数字,也只能存储5个汉字: char(10),只能存储10个英文字符或数字,也只能 ...

  6. mysql float字节长度_分析MySQL数据类型的长度

    分析MySQL数据类型的长度 MySQL有几种数据类型可以限制类型的"长度",有CHAR(Length).VARCHAR(Length).TINYINT(Length). SMAL ...

  7. mysql user 用户名长度_为什么注册的用户账号长度不能超过5个字符

    注册程序如下,IIS6.02K3数据库是MYSQLODBC是最新版当新用户注册时,LOGINID长度不让超过5个字符,实际上数据库中这个字段是20个字符长库LOGINID=trim(request(& ...

  8. python汉字长度_行中字符串的长度(Python)

    我正在尝试将一个.txt文件导入到一些专有软件中,但似乎不断收到一个错误.txt文件的大小几乎是2GB,大约有5600万行. 与制造商交谈后,他们说其中一条线路可能有错误.每一行应该包含一个MD5哈希 ...

  9. java获取长度_获取java长度

    Java获取本机MAC地址 为什么写这个呢?因为前几天看见网上有采用windows命令获取局域网和广域网MAC,查了查可以直接用JDK的方法. MAC可用于局域网验证,提高安全性. import ja ...

最新文章

  1. oracle 不查加锁的记录,oracle 锁查询 select加锁方法
  2. python清空字典保留变量_python彻底清除字典数据,clear方法使用
  3. unittest单元测试框架总结
  4. boost::gil模块数字扩展中的 resample_pixels() 示例
  5. python中enumerate()的理解
  6. 信息学奥赛一本通 1225:金银岛 | OpenJudge NOI 4.6 1797:金银岛
  7. tcp协议的主要功能是什么_计算机网络 | 一文搞懂什么是TCP/IP协议
  8. 用MySQL写怎么删除字母_mysql如何替换掉字母
  9. 贾跃亭的造车梦还在继续 旗下FF在国内成立新公司
  10. 带属性的向前声明:warning: type attributes are honored only at type definition
  11. hdu5187 奇怪题
  12. 《BI那点儿事》ETL中的关键技术
  13. PHP中的数组(数据结构)
  14. 这些JAVA毕业设计拿走不谢
  15. 记一次失败的机械键盘拆机换轴经历(含失败的经验总结)
  16. noip2018翻车记
  17. 视频压缩软件APP有哪些?让我来告诉你答案
  18. Git 学习(篇六 --储藏与清理)
  19. 创业公司 JPEGmini 可以将照片缩小5倍,但保证图片质量和分辨率
  20. 人工智能——机器学习与深度学习思维导图

热门文章

  1. 听说你想去大厂看妹子,带你看看字节跳动实习算法岗面试长啥样?
  2. tableau实战系列(九)-用 ZN 函数处理数据缺失点
  3. 化整为零,一步一步教你搭建Prometheus监控报警系统
  4. 主成分分析(Principal components analysis)
  5. Python入门100题 | 第063题
  6. Linux下NDK的安装配置
  7. 第三章 函数编程
  8. 区块链在天猫国际商品溯源中的应用
  9. netty reactor线程模型分析
  10. windows下spark开发环境配置