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 limitat 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 limit
len: 2147483646 java.lang.OutOfMemoryError: Requested array size exceeds VM limit
len: 2147483645 OK
len: 2147483644 OK
len: 2147483643 OK

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

总结

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

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

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

最大的 String 字符长度是多少?相关推荐

  1. c 获取char*的长度_最大的 String 字符长度是多少?

    点击上方"武培轩",选择"设为星标" 技术文章第一时间送达! String 类可以说是在 Java 中使用最频繁的类了,就算是刚刚接触 Java 的初学者也不会 ...

  2. String类型的字符长度(码点/代码单元的区别)

    查看String的源码可以发现它以一个char类型的数组保存字符串的,而String.length()方法返回的也是这个char数组的长度. 那么,这个长度和"字符"长度有什么关系 ...

  3. java string最大长度_一个Java字符串中到底有多少个字符?

    作者:鸟窝 依照Java的文档, Java中的字符内部是以UTF-16编码方式表示的,最小值是 (0),最大值是(65535), 也就是一个字符以2个字节来表示,难道Java最多只能表示 65535个 ...

  4. JS 计算字符长度 String.charCodeAt(index)

    一个汉字 2 个字符,一个字母 1 个字符 String.charCodeAt(index) 返回指定索引位置的 Unicode 编码 String.charAt(index) 返回指定索引位置的字符 ...

  5. java基础-String字符串字符长度校验

    java基础-String字符串字符长度校验 /*** 校验字符串是否在规定字符数内* @param str* @param maxLength* @return*/ public static bo ...

  6. C#支持中文的格式化字符长度方法

    支持中文的格式化字符长度,自动添加...符号 #region 格式化字符串长度/// <summary>/// 格式化字符串长度/// </summary>/// <pa ...

  7. java 字符长度 中文_java判断中文字符串长度的简单实例

    话不多说,上代码: /** * 获取字符串的长度,如果有中文,则每个中文字符计为2位 * @param value 指定的字符串 * @return 字符串的长度 */ public static i ...

  8. c++ string 字符_C/C++知识分享:C++标准库之 string 类型,各种运算全部掌握

    简介: C++标准库提供的类型:string.长度可变的字符串,操作简单 仅为包含个人常用函数 头文件 string 类型与其它的标准库类型相同,都需要包含对应的头文件 string 类型的定义和初始 ...

  9. SMARTFORMS 输出动态文本(字符长度超出255)

    场景:当字符长度超出Smartforms中的最大可输出长度255时,将字符串转换到内表打印显示. 首先将字符串转换为ITF Text. DATA: l_string TYPE string,lt_st ...

最新文章

  1. 数据备份基础之备份类型
  2. action标签的使用
  3. 2023年考研之路或将更难
  4. 用Eclipse调试Java程序的一些小技巧
  5. sap实施和开发哪个前景_2021年了!还不知道 SAP顾问的职业前景?
  6. python -- join()
  7. MySQL命令:增删与改
  8. db2嵌套查询效率_详解oracle嵌套循环及实例说明
  9. 软件测试第一部分——初步概念与过程
  10. 【转载】完全手册 Flex 3.0 RIA开发详解(光盘内容)(书下载以及书的源代码下载)...
  11. Python基础知识笔记(二)
  12. solr搭建(linux)
  13. i3wm 获取window class
  14. 批量获取中国所有行政区域经边界纬度坐标(到县区级别)
  15. 手机怎么打开html游戏,网页游戏打不开怎么解决 网页游戏打不开解决方法
  16. IMX6ULL 学习bug记载
  17. 【NLP】中文分词方法:规则分词(正向最大匹配、逆向最大匹配、双向最大匹配)
  18. 对话管理DST:Deep Neural Network Approach for the Dialog State Tracking Challenge
  19. 线上引流方法有哪些?怎么做线上引流推广?
  20. Android宠物寄养软件APP毕业设计

热门文章

  1. axios,post请求传递数组
  2. 检测PC端和移动端的方法总结(转)
  3. linux如何绑定域名和ip?
  4. arc鼠标滚轮方向_超级怪异鼠标的评论:Microsoft Arc Touch和楔形鼠标
  5. 网络原理-网络发展史和通信基础
  6. 【可视化】Power Map实现大数据可视化操作
  7. 评:电信欲收购联通C网传闻
  8. 【机器学习】贝叶斯模型(Bayesian Model)
  9. i7 10750h和i5 11260h选哪个
  10. ES基本查询,filter 查询,组合查询