iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > VUE >String长度的限制是多少
  • 761
分享到

String长度的限制是多少

2024-04-02 19:04:59 761人浏览 安东尼
摘要

这篇文章主要介绍“String长度的限制是多少”,在日常操作中,相信很多人在String长度的限制是多少问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”String长度的限制是

这篇文章主要介绍“String长度的限制是多少”,在日常操作中,相信很多人在String长度的限制是多少问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”String长度的限制是多少”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

String

首先要知道String的长度限制我们就需要知道String是怎么存储字符串的,String其实是使用的一个char类型的数组来存储字符串中的字符的。

String长度的限制是多少
存储String的容器原来是它

那么String既然是数组存储那数组会有长度的限制吗?是的有限制,但是是在有先提条件下的,我们看看String中返回length的方法。

String长度的限制是多少
String类中的length方法

由此我们看到返回值类型是int类型,Java中定义数组是可以给数组指定长度的,当然不指定的话默认会根据数组元素来指定:

  • int[] arr1 = new int[10]; // 定义一个长度为10的数组

  • int[] arr2 = {1,2,3,4,5}; // 那么此时数组的长度为5

整数在java中是有限制的,我们通过源码来看看int类型对应的包装类Integer可以看到,其长度最大限制为2^31  -1,那么说明了数组的长度是0~2^31-1,那么计算一下就是(2^31-1 = 2147483647 = 4GB)

String长度的限制是多少
Integer的取值范围

看到这我们尝试通过编码来验证一下上述观点。

String长度的限制是多少
以字面量形式定义字符串

以上是我通过定义字面量的形式构造的10万个字符的字符串,编译之后虚拟机提示报错,说我们的字符串长度过长,不是说好了可以存21亿个吗?为什么才10万个就报错了呢?

其实这里涉及到了JVM编译规范的限制了,其实JVM在编译时,如果我们将字符串定义成了字面量的形式,编译时JVM是会将其存放在常量池中,这时候JVM对这个常量池存储String类型做出了限制,接下来我们先看下手册是如何说的。

String长度的限制是多少
java虚拟机规范截图

常量池中,每个 cp_info 项的格式必须相同,它们都以一个表示 cp_info 类型的单字节 “tag”项开头。后面 info[]项的内容 由tag  的类型所决定。

String长度的限制是多少
java虚拟机规范手册常量类型表

我们可以看到 String类型的表示是 CONSTANT_String ,我们来看下CONSTANT_String具体是如何定义的。

String长度的限制是多少

这里定义的 u2 string_index 表示的是常量池的有效索引,其类型是CONSTANT_Utf8_info  结构体表示的,这里我们需要注意的是其中定义的length我们看下面这张图。

String长度的限制是多少

在class文件中u2表示的是无符号数占2个字节单位,我们知道1个字节占8位,2个字节就是16位 ,那么2个字节能表示的范围就是2^16- 1 =  65535 。范中class文件格式对u1、u2的定义的解释做了一下摘要:

这里对java虚拟机规摘要部分

1、class文件中文件内容类型解释

  • 定义一组私有数据类型来表示 Class 文件的内容,它们包括 u1,u2 和 u4,分别代表了 1、2 和 4 个字节的无符号数。

  • 每个 Class 文件都是由 8 字节为单位的字节流组成,所有的 16 位、32 位和 64 位长度的数据将被构造成 2 个、4 个和 8 个 8 字节单位来表示。

2、程序异常处理的有效范围解释

  • start_pc 和 end_pc 两项的值表明了异常处理器在 code[]数组中的有效范围。

  • start_pc 必须是对当前 code[]数组中某一指令的操作码的有效索引,end_pc 要么是对当前 code[]数组中某一指令的操作码的有效索引,要么等于 code_length的值,即当前 code[]数组的长度。start_pc 的值必须比 end_pc 小。

  • 当程序计数器在范围[start_pc, end_pc)内时,异常处理器就将生效。即设 x 为异常句柄的有效范围内的值,x 满足:start_pc &le; x < end_pc。

  • 实际上,end_pc 值本身不属于异常处理器的有效范围这点属于 Java 虚拟机历史上的一个设计缺陷:如果 Java 虚拟机中的一个方法的 code 属性的长度刚好是 65535个字节,并且以一个 1 个字节长度的指令结束,那么这条指令将不能被异常处理器所处理。不过编译器可以通过限制任何方法、实例初始化方法或类初始化方法的code[]数组最大长度为 65534,这样可以间接弥补这个 BUG。

注意:这里对个人认为比较重要的点做了标记,首先第一个加粗说白了就是说数组有效范围就是【0-65565】但是第二个加粗的地方又解释了,因为虚拟机还需要1个字节的指令作为结束,所以其实真正的有效范围是【0-65564】,这里要注意这里的范围仅限编译时期,如果你是运行时拼接的字符串是可以超出这个范围的。

接下来我们通过一个小实验来测试一下我们构建一个长度为65534的字符串,看看是否就能编译通过。

首先通过一个for循环构建65534长度的字符串,在控制台打印后,我们通过自己度娘的一个在线字符统计工具计算了一下确实是65534个字符,如下:

String长度的限制是多少
String长度的限制是多少

然后我们将字符复制后以定义字面量的形式赋值给字符串,可以看到我们选择这些字符右下角显示的确实是65534,于是乎运行了一波,果然成功了。

String长度的限制是多少
String长度的限制是多少

看到这里我们来总结一下:

问:字符串有长度限制吗?是多少?

答:首先字符串的内容是由一个字符数组 char[] 来存储的,由于数组的长度及索引是整数,且String类中返回字符串长度的方法length()  的返回值也是int ,所以通过查看java源码中的类Integer我们可以看到Integer的最大范围是2^31  -1,由于数组是从0开始的,所以数组的最大长度可以使【0~2^31-1】通过计算是大概4GB。

但是通过翻阅java虚拟机手册对class文件格式的定义以及常量池中对String类型的结构体定义我们可以知道对于索引定义了u2,就是无符号占2个字节,2个字节可以表示的最大范围是2^16  -1 = 65535。

其实是65535,但是由于JVM需要1个字节表示结束指令,所以这个范围就为65534了。超出这个范围在编译时期是会报错的,但是运行时拼接或者赋值的话范围是在整形的最大范围。

到此,关于“String长度的限制是多少”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: String长度的限制是多少

本文链接: https://www.lsjlt.com/news/84344.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • String长度的限制是多少
    这篇文章主要介绍“String长度的限制是多少”,在日常操作中,相信很多人在String长度的限制是多少问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”String长度的限制是...
    99+
    2022-10-19
  • String最大长度是多少
    这篇文章将为大家详细讲解有关String最大长度是多少,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。前言当你看到这个问题“String长度限制是多少”时是不...
    99+
    2022-10-19
  • java int的长度是多少
    int:int 数据类型是32位、有符号的以二进制补码表示的整数; (推荐学习:java课程)最小值是 -2,147,483,648(-2^31);最大值是 2,147,483,647(2^31 - 1);一般地整型变量默...
    99+
    2016-10-23
    java教程 java
  • 你搞清楚了吗?| GET请求方式的长度限制到底是多少?
    目录 📍 浏览器限制 📍 服务器限制 在大多数人的一贯认识中,一直认为get请求方式有2048B的长度限制,其实这种说法是有失偏颇的,甚至可以说是错误的。 这个问题一直以来似乎是被N多人误解,其实Htt...
    99+
    2023-08-31
    服务器 浏览器 URL长度限制 HTTP协议 get请求
  • mysql中int(5)的长度是多少
    这篇文章主要介绍“mysql中int(5)的长度是多少”,在日常操作中,相信很多人在mysql中int(5)的长度是多少问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”mysql中int(5)的长度是多少”的疑...
    99+
    2023-07-06
  • Java中Arraylist的最大长度是多少
    这篇文章主要介绍了Java中Arraylist的最大长度是多少,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Arraylist的最大长度Arraylist的MAX_ARRAY...
    99+
    2023-06-29
  • php数组最大长度是多少
    PHP 的数组不是一个固定长度的数据结构,因此没有明确的最大长度限制。在 PHP 中,数组是一种有序的、可重复的数据集合,可以存储任何类型的数据,包括整数、浮点数、字符串、布尔值等。PHP 数组的长度取决于可用的内存,因为 PHP 数组在内...
    99+
    2023-05-19
  • MySQL的sql语句长度限制吗
    MySQL的sql语句长度有限制,适用于单个SQL语句的长度以及整个连接中发送的数据包的大小,通常情况下:1、MySQL 5.7版本之前,单个 SQL 语句的长度限制为 64KB;2、MySQL 5.7版本及以后,单个 SQL 语句的长度限...
    99+
    2023-07-25
  • Go 中的数组长度有什么限制?
    Go 是一门强类型的编程语言,它对数组的长度有着明确的限制。在本文中,我们将深入探讨 Go 中数组长度的限制,以及如何在代码中处理超出长度限制的情况。 在 Go 中,数组是一组具有相同类型的元素序列。数组的长度是在定义时确定的,且不能被更改...
    99+
    2023-10-07
    数组 git 日志
  • 如何修改Mysql中group_concat的长度限制
    在mysql中,有个函数叫“group_concat”,平常使用可能发现不了问题,在处理大数据的时候,会发现内容被截取了,其实MYSQL内部对这个是有设置的,默认不设置的长度是1024,如果我们需要更大,就...
    99+
    2022-10-18
  • 怎么在php中限制数组的长度
    怎么在php中限制数组的长度?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。PHP开发环境搭建工具有哪些一、phpStudy,是一个新手入门最常用的开发环境。二、WampSe...
    99+
    2023-06-14
  • 解决mysql中group_concat长度限制的方案
    解决mysql中group_concat长度限制的方案 group_concat函数获得group_concat的最大长度两种解决方案 group_concat函数 在mysql中的group_concat函数默认支持的最大...
    99+
    2023-08-17
    mysql 数据库
  • 微型计算机中可以处理的二进制数据长度是多少位
    这篇文章将为大家详细讲解有关微型计算机中可以处理的二进制数据长度是多少位,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。微型计算机中CPU进行算术运算和逻辑运算时,可以处理的二进制数据长度是32位、64位。...
    99+
    2023-06-14
  • MySQL中每种类型标识符的最大长度是多少?
    众所周知,MySQL 中的某些对象被称为标识符。这些对象包括数据库、表、索引、列、别名、视图、存储过程、分区、表空间等。标识符使用 Unicode (UTF-8) 存储。每种类型标识符的最大长度如下表所示:Sr.编号标识符最大长度(字符)1...
    99+
    2023-10-22
  • php中如何限制返回字符串的长度
    PHP 是一种广泛使用的服务器端脚本语言,用于创建动态网页。在 PHP 中,查询数据库是经常使用的操作。当我们查询数据库时,经常会遇到返回的字符串长度超过限制的情况。那么在 PHP 中,如何限制返回字符串的长度呢?一、substr...
    99+
    2023-05-14
  • 修改dedecms文章标题长度限制的方法
    本文实例讲述了修改dedecms文章标题长度限制的方法。分享给大家供大家参考。具体方法如下: 一般来说,织梦(dedecms)系统有一个长度限制,因为存储文章标题的数据库字段长度默认是60字节即30个汉字长度,但是文章标...
    99+
    2022-06-12
    修改 dedecms 文章标题 长度限制 方法
  • InnoDB锁结构个数最大限制是多少
    本篇内容介绍了“InnoDB锁结构个数最大限制是多少”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! in...
    99+
    2022-10-19
  • http代理的ip有效时长是多少
    这篇文章主要介绍“http代理的ip有效时长是多少”,在日常操作中,相信很多人在http代理的ip有效时长是多少问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”http代理的ip有效时长是多少”的疑惑有所帮助!...
    99+
    2023-06-25
  • html5如何限制输入数字的多少
    这篇文章主要介绍html5如何限制输入数字的多少,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完! html中,可用输入标签的max和min属性来限制输入数字...
    99+
    2022-10-19
  • 技术分享 | MySQL 字段长度限制的计算方法
    一、MySQL 限制回顾 之前在《MySQL Text 字段的限制》一文中讲过了关于 MySQL 在 Server 层和 InnoDB 层的限制,但是限制的算法没有详细展开,这里进行补充说明,先回顾一下 MySQL 的两个限制 MySQL...
    99+
    2015-02-24
    技术分享 | MySQL 字段长度限制的计算方法
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作