为什么Java中的最大字符串文字长度是65534?

问题描述 投票:0回答:1

我编译了这段代码。 (使用

javac 21.0.1

public static final String MAX = "AAAAA ...";

如果我在文字中重复 'A' 65534 次,编译就可以了。
但是,如果我在文字中重复“A”65535 次,则会收到编译错误“常量字符串太长”。

为什么长度限制是65534而不是65535?

规格

CONSTANT_Utf8_info {
u1 标签;
u2 长度;
u1 字节[长度];
}

length:length 项的值给出了字节数组中的字节数(而不是结果字符串的长度)。

第 4 章。类文件格式

u2 的最大长度是 0xFFFF = 65535,而不是 65534。
在UTF-8中,“A”是1个字节,那么字符串长度不是限制为65535吗?

Javac源代码

private void checkStringConstant(DiagnosticPosition pos, Object constValue) {
    if (nerrs != 0 || // only complain about a long string once
        constValue == null ||
        !(constValue instanceof String str) ||
        str.length() < PoolWriter.MAX_STRING_LENGTH)
        return;
    log.error(pos, Errors.LimitString);
    nerrs++;
}

正确的代码是

str.length() <= PoolWriter.MAX_STRING_LENGTH
吗?

java javac
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.