String长度限制?
String我们在开发和学习中会经常用到,但对String类型的取值范围我们并不明确。
String底层是char数组,并未标明长度限制。java中可以对数组指定长度,如果不指定就以实际元素来指定
private final char value[];
从底层方法length()可以看出,返回的是int类型。
public int length()
而在java中,int的最大值是2^31-1 = 2147483647,也是value[]数组的长度为 2^31-1 。
但当在程序中定义一个10万字符的字符串后编译,jvm会提示报错:java: 常量字符串过长
是因为jvm编译规范做了限制,在编译时,jvm会把字面量的字符串放到常量池中,而JVM中class文件做了规范。
所有在常量池的项都具有以下格式。
cp_info{
u1 tag;
u2 info[];
}
其中
u1 tag表示标志符,代表当前这个常量属于什么类型;u2 info[]由 tag 决定该数组的内容。(详见《Java虚拟机规范》 4.4章节)注:在class文件中,有专用的数据类型用于表示Class文件的内容,包括u1、u2、u4,分别代表1、2、4个字节无符号数;每个Class文件都由8个字节为单位的字节流组成,所有16 、 23 、 64 位长度的数据将被构造成2个 、 4个 、 8个 8字节单位来表示(详见《Java虚拟机规范》第4章)
tag对应的项有。
| 常量类型 | 值 |
|---|---|
| CONSTANT_Class | 7 |
| CONSTANT_Fieldref | 9 |
| CONSTANT_Methodref | 10 |
| CONSTANT_InterfaceMethodref | 11 |
| CONSTANT_String | 8 |
| CONSTANT_Integer | 3 |
| CONSTANT_Float | 4 |
| CONSTANT_Long | 5 |
| CONSTANT_Double | 6 |
| CONSTANT_NameAndType | 12 |
| CONSTANT_Utf8 | 1 |
| CONSTANT_MethodHandle | 15 |
| CONSTANT_MethodType | 16 |
| CONSTANT_InvokeDynamic | 18 |
String对应的是CONSTANT_String项,具体定义格式为
CONSTANT_String_info{
u1 tag;
u2 string_index;
}
u1 tag的值为CONSTANT_String(8);u2 string_index的值必须是对常量池表的有效索引,且该索引处的项必须是CONSTANT_Utf8_info结构
字符串是以CONSTANT_Utf8型式在常量池中表示。class文件中CONSTANT_Utf8的具体定义格式,
CONSTANT_Utf8_info {
u1 tag;
u2 length;
u1 bytes[length];
}
u1 tag的值为CONSTANT_Utf8(1);CONSTANT_Utf8_info的内容以u2 length属性来确定长度;u1 bytes[length]表示字符串值的byte数组
其中u2代表2个无符号占字节单位,而1 个字节占8位(bit),2个也就是16位,16位最高表示的是2^16 - 1 = 65535,又因为虚拟机需要1个字节的指令作为结束指令,所以其真正的有效范围是【0-65564】。当然这个范围是编译期的有效范围,而运行时拼接的字符串是在整形的最大范围。
String长度限制?的更多相关文章
- java String长度与varchar长度匹配理解(字符和字节长度理解)
java String长度与varchar长度匹配理解(字符和字节长度理解) string中的length()长度,返回的是char的数量,每个char可以存储世界上任何类型的文字和字符,一个char ...
- string长度问题
原文地址: https://toutiao.io/shares/2029578/url String是Java中很重要的一个数据类型,除了基本数据类型以外,String是被使用的最广泛的了,但是,关于 ...
- C# 与数据库中字段类型 Int16(short), Int32(int), Int64(long)的取值范围、区别 。string长度
一开始看到Int16, Int32, Int64这三种类型就觉得有点怪, 为什么要整个数字结尾的, 挺怪的. 昨天互相想到, ms这么干就是想让大家一眼就知道这个数据类型占多大空间吧. Int8, 等 ...
- Java int转string 长度不足左补0
最近项目中用到这个需求,我试了两个方法都可以实现 方法一:(推荐) String s=String.format("%010d", 123)//123为int类型,0代表前面要补的 ...
- 我说精通字符串,面试官竟然问我 Java 中的 String 有没有长度限制?
String 是 Java 中很重要的一个数据类型,除了基本数据类型以外,String 是被使用的最广泛的了,但是,关于 String,其实还是有很多东西容易被忽略的. 就如本文我们要讨论的问题:Ja ...
- 我说我精通字符串,面试官竟然问我Java中的String有没有长度限制!?|附视频讲解
关于String有没有长度限制的问题,我之前单独写过一篇文章分析过,最近我又抽空回顾了一下这个问题,发现又有了一些新的认识.于是准备重新整理下这个内容. 这次在之前那篇文章的基础上除了增加了一些验证过 ...
- Swift3 - String 字符串、Array 数组、Dictionary 字典的使用
Swift相关知识,本随笔为 字符串.数组.字典的简单使用,有理解.使用错误的地方望能指正. ///************************************************** ...
- string黑科技
1. string对象的定义和初始化以及读写 string s1; 默认构造函数,s1为空串string s2(s1); 将s2初始化为s1的一个副本string s3("valuee&qu ...
- Java总结篇系列:Java String
String作为Java中最常用的引用类型,相对来说基本上都比较熟悉,无论在平时的编码过程中还是在笔试面试中,String都很受到青睐,然而,在使用String过程中,又有较多需要注意的细节之处. 1 ...
随机推荐
- 基于pgrouting的路径规划处理
对于GIS业务来说,路径规划是非常基础的一个业务,一般公司如果处理,都会直接选择调用已经成熟的第三方的接口,比如高德.百度等.当然其实路径规划的算法非常多,像比较著名的Dijkstra.A*算法等.当 ...
- Python技能树及CSDN MarkDown编辑器测评
测评目录 python技能树测评 python技能树是什么 python技能树长什么样 如何学习python技能树 python技能树可能需要的改进 对python技能树的总结 CSDN MarkDo ...
- javaScript中Math内置对象基本方法入门
概念 Math 是javaScript的内置对象,包含了部分数学常数属性和数学函数方法. Math 不是一个函数对象,用户Number类型进行使用,不支持BigInt. Math 的所有属性与方法都是 ...
- [还不会搭建博客吗?]centos7系统部署hexo博客新手入门-进阶,看这一篇就够了
@ 目录 *本文说明 请大家务必查看 前言 首先介绍一下主角:Hexo 什么是 Hexo? 环境准备 详细版 入门:搭建步骤 安装git: 安装node: 安装Hexo: 进阶:hexo基本操作 发布 ...
- 一文搞懂CDN加速原理
开源Linux 长按二维码加关注~ 一.什么是 CDN CDN的全称是(Content Delivery Network),即内容分发网络.其目的是通过在现有的Internet中增加一层新的CACHE ...
- 解读先电2.4版 iaas-install-mysql.sh 脚本
#!/bin/bash #声明解释器路径 source /etc/xiandian/openrc.sh #生效环境变量 ping $HOST_IP -c 4 >> /dev/null 2& ...
- 『现学现忘』Git基础 — 26、给Git命令设置别名
目录 1.什么是Git命令的别名 2.别名的全局配置 3.别名的局部配置 4.删除所有别名 5.小练习 1.什么是Git命令的别名 Git中命令很多,有些命令比较长,有些命令也不好记,也容易写错. 例 ...
- controller-tool的简单使用
介绍 在上一篇code-generator简单介绍中重点介绍了如何使用code-generator来自动生成代码,通过自动生成的代码可以帮助我们像访问k8s内置资源那样来操作我们的CRD,其实就是帮助 ...
- IX交换中心网络架构分析
拓扑如上 IX功能介绍 IX交换中心,客户接入交换中心只收取端口费用,在交换中心网内的流量不收取任何费用,一个交换中心是否值得接入主要看该ix所接入的用户 假如客户A是做视频网站,用的视频源是IQY的 ...
- 【ASP.NET Core】URL重写
今天老周和大伙伴们聊聊有关 Url Rewrite 的事情,翻译过来就是 URL 重写. 这里不得不提一下,URL重定向与重写的不同. 1.URL重定向是客户端(通常是浏览器)向服务器请求地址A,然后 ...