String字符串的最大长度

本文探讨了Java中String字符串的最大长度,分别从编译期(Javac与Eclipse JDT编译器的区别)和运行期进行分析。在Javac下,String的最大长度为65534,而Eclipse由于其编译器优化,能够编译更长的字符串。运行期String的长度受制于内存,约为4GB。
摘要由CSDN通过智能技术生成

开篇三个问题

作为Java的程序员,不知道在Java代码中定义了多少个字符串,可是看看下面3个问题。你是否认真思考过?是否动手实践过?

1.Java中的字符串String的最大长度是多少?
2.Eclipse使用哪种Java编译器?
3.为何Eclipse要出自己的编译器?

对于字符串可以承受的最大长度,要分为2个阶段,一个是编译时期(也就是你代码定义了一个String字符串,String s= "xiaohu"),一个是运行时期(指在程序运行过程中)

编译期String字符串的限制

我们都知道JVM里面是包含常量池的,(是一种对字符串的性能优化,不用反复创建新的字符串了)当我们使用字符串字面量直接定义String的时候,是会把字符串在常量池中存储一份的。常量池中的每一项常量都是一个表,都有自己对应的类型。Java中的UTF-8编码的Unicode字符串在常量池中以CONSTANT_Utf8_info类型表,结构如下:

CONSTANT_Utf8_info型常量的结构
类型    名称  数量
u1    tag 1
u2    length  1
u1    bytes   length

u2类型的length的值就表明了这个UTF-8编码字符串长度是多少字节。所以CONSTANT_Utf8_info型常量对应的最大长度也就是java中UTF-8编码的字符串的长度,顺便提一下Class文件中的方法和字段也是引用CONSTANT_Utf8_info型常量来描述名称的。u2是无符号的16位整数,因此理论上允许的的最大长度是2^16-1=65535

编译器javac下String的长度

创建一个测试类

public class TestStr {
   
    public static void main(String[] args{
             String LongStr =
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值