java超长字符序列化_String 字符串最长可以有多长?

577e765bb663a77a33a031a845d659a2.png

Java技术栈

www.javastack.cn

打开网站看更多文章

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 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,大家可以在自己的电脑上测试下。

最近热文:

扫码关注

Java技术栈

公众号干货。

点击「阅读原文」带你飞~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/304558.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一文读懂 AVL 树

背景AVL 树是一棵平衡的二叉查找树&#xff0c;于 1962 年&#xff0c;G. M. Adelson-Velsky 和 E. M. Landis 在他们的论文《An algorithm for the organization of information》中发表。所谓的平衡之意&#xff0c;就是树中任意一个结点下左右两个子树的高度差不超过 1。&am…

欧几里得范数_从范数到正则化

范数是一个在数学领域中常用的工具&#xff0c;同时也是学习机器学习原理中经常碰到的概念。本文将从范数的定义出发&#xff0c;逐步带你理解其在机器学习中的应用。首先需要明确的是&#xff0c;范数是一个函数&#xff0c;在机器学习中我们通常用它来衡量向量的大小。 范数定…

C++ 自定义调试信息的输出

自定义调试信息的输出调试信息的输出方法有很多种, 例如直接用printf, 或者出错时使用perror, fprintf等将信息直接打印到终端上, 在Qt上面一般使用qDebug&#xff0c;而守护进程则一般是使用syslog将调试信息输出到日志文件中等等...使用标准的方法打印调试信息有时候不是很…

IdentityServer4之持久化很顺手的事

前言原计划打算在春节期间多分享几篇技术文章的&#xff0c;但到最后一篇也没出&#xff0c;偷懒了吗&#xff1f;算是吧&#xff0c;过程是这样的&#xff1a;每次拿出电脑&#xff0c;在孩姥姥家的院子总有阳光沐浴&#xff0c;看不清屏幕&#xff0c;回屋又有点冷(在强行找理…

java获取下周一整周的日期_获取Java中日期范围内的所有星期五

我最近遇到了一个任务,我必须在一个日期范围内获得所有星期五.我写了一小段代码,很惊讶看到一些奇怪的行为.以下是我的代码&#xff1a;public class Friday {public static void main(String[]args){String start "01/01/2009";String end "12/09/2013"…

手写体识别代码_Python识别图片中的文字

一、前言不知道大家有没有遇到过这样的问题&#xff0c;就是在某个软件或者某个网页里面有一篇文章&#xff0c;你非常喜欢&#xff0c;但是不能复制。或者像百度文档一样&#xff0c;只能复制一部分&#xff0c;这个时候我们就会选择截图保存。但是当我们想用到里面的文字时&a…

递推与储存,是动态规划的关键

小智最近由于项目需要&#xff0c;经常要接触到一些规划类的问题。那今天就给大家讲一讲旅行商问题及其解法吧。旅行商问题&#xff0c;即TSP问题&#xff08;Travelling Salesman Problem&#xff09;。问题是&#xff0c;有一个旅行商人要拜访n个城市&#xff0c;每个城市只能…

SQL 标量值函数的调用

调用 MS SQL 标量值函数&#xff0c;应该在函数前面加上 "dbo."&#xff0c;否则会报 “不是可以识别的 内置函数名称”错误。例如 DECLARE WhichDB TINYINT; SELECT WhichDB dbo. user_GetWhichDB(1);--看看是哪个数据库的 另外&#xff0c;标量值函数就相当于…

dotnet core TargetFramework 解析顺序探索

dotnet core TargetFramework 解析顺序测试Intro现在 dotnet 的 TargetFramework 越来越多&#xff0c;抛开 .NET Framework 不谈&#xff0c;如果一个类库支持多个 TargetFramework 应用实际运行的时候会使用哪个版本的 API 呢&#xff0c;之前一直都是想当然的自以为是了&…

java递归单链表查找中间元素_《数据结构与算法——C语言描述》答案 3.11 查找单链表中的特定元素(递归)...

转载请注明出处&#xff1a;http://blog.csdn.net/xdz78#include #include //查找单链表中的特定元素&#xff0c;《数据结构与算法——c语言描述》 3.11 答案int count;//全局变量自动初始化为0int m;//需要查找的元素大小typedef struct student {int data;struct student *n…

python调用robotframework_robotframework+python接口自动化的点滴记录(2)

1.在循环体内&#xff0c;赋值语句的前后名称不能一样&#xff0c;否则在跑循环的第二次时就会报错&#xff1a;TypeError: not all arguments converted during string formatting这样写是错的&#xff1a;${设置计划接口_请求body} string format ${设置计划接口_请求body}…

这种感觉真爽

今天接到客户的修改需求&#xff0c;说了一大段话&#xff0c;然后我们开始讨论解决方案。最后自己来负责前台的修改。看了六七个小时的代码&#xff0c;最后修改了一行。达到了要求。想起了以前课文中学到的一句话&#xff1a;画一条线1美元&#xff0c;知道在哪里画这条线999…

大数据时代,掌握数据分析需要做到这几点

这些年来&#xff0c;随着进入大数据时代&#xff0c;各行各业均有一个词频频被提到&#xff0c;那就是数据分析。那么数据分析究竟是什么呢&#xff1f;数据分析就是指用适当的统计分析方法对收集来的大量数据进行处理分析&#xff0c;提取有用信息并形成结论&#xff0c;从而…

93.7%的程序员!竟然都不知道Redis为什么默认16个数据库?

背景在实际项目中redis常被应用于做缓存&#xff0c;分布式锁/消息队列等。但是在搭建配置好redis服务器后很多朋友应该会发现和有这样的疑问&#xff0c;为什么redis默认建立了16个数据库&#xff0c;16个数据库的由来redis是一个字典结构的存储服务器&#xff0c;一个redis实…

python tablewidget 颜色_QT中,QTableView鼠标移动到item上时该item所在行的背景颜色变成其他颜色,这要怎么实现...

展开全部//不解释&#xff0c;自己看。不保证完整&#xff0c;仅供思路参考#include #include "TableView.h"#include #include int main(int argc, char *argv[]){QApplication a(argc, argv);QStandardItemModel model;for ( int col 0; col {QList list;for ( in…

java8 垃圾 不同_【不同的Java垃圾回收器的比较】

现在已经是2014年了&#xff0c;但是对大多数开发人员而言有两件事情仍然是个谜——java垃圾回收以及异性(码农又被嘲笑了)。由于我对后者也不是特别了解&#xff0c;我想我还是试着说说前者吧&#xff0c;尤其是随着Java8的到来&#xff0c;这个领域也发生了许多重大的变化及提…

。。。第一次。。。

记得第一次给你发短信。。问你。。数据结构期末考试有没有范围啊。。没有告诉你。。那次只是给你发短信的借口。。记得第一次打电话给你。。问你。。那个。。什么什么。。的那道题。。你会做吗。。第一次在电话里听你的声音。。是那样的甜美。。记得第一次和安子。阿昆吃饭的时…

“一边熬夜一边求不要猝死”,90后养生朋克指南,条条扎心!

随着一批又一批的90后步入中年秃头、失眠、衰老...健康的压力如影如随是时候开始养生朋克了当代青年&#xff1a;养生朋克指南养生朋克一边作死一边自救的养生方式比如一边熬夜一边涂贵价护肤品用最贵的眼霜 熬最长的夜心理活动经常是&#xff1a;一边熬夜一边祈祷自己不要猝死…

EntityFramework Core查询数据基本本质

【导读】在EntityFramework Core中、当查询出数据后&#xff0c;是如何将数据映射给实体的呢&#xff1f;本节我们预先做个基本探讨&#xff0c;后续给出其底层原理本质前不久&#xff0c;我们在探索性能时&#xff0c;给出利用反射达到性能瓶颈时的方案即使用委托&#xff0c;…

pythonmt4通讯swot矩阵_swot分析矩阵范例(各部门)

优势(Strengths)S1.团队工作氛围和谐融洽&#xff0c;作风吃苦耐劳&#xff0c;积极主动、自我改进意识强S2.品质管控专业人才工作能力强、沟通能力强&#xff0c;执行力坚决S3.产品质量管控体制、流程健全&#xff0c;拥有质量监督管控权S4.产品检测、试验设备齐全&#xff0c…