关于字面量string的长度

来源:3-2 Java String 可以有多长?

AndroidMsky

2019-03-07

老师您好,
我看您是说这个string是存在栈里,栈的限制是65536.
我觉得是主要是class里面的结构体length为两个字节限制的吧(当然您也说了有这个限制),string在内存的存在是char数组形式,无论在哪里都应该会受到数组最大值限制。我觉得栈里只是string的引用没有实际值。

另外那个结构体是怎么看到的,我查了好久不知道怎么看。

我说的有错误请老师指证。谢谢老师

写回答

1回答

bennyhuo

2019-03-07

我看您是说这个string是存在栈里,栈的限制是65536.我觉得是主要是class里面的结构体length为两个字节限制的吧(当然您也说了有这个限制)

说的就是字面量 u8 info 结构体的限制,不是栈的限制哈~栈内存有大小限制,但不会这样限制字符串长度。

string在内存的存在是char数组形式,无论在哪里都应该会受到数组最大值限制。

是的没错,但char数组的大小远比 65536 要大,具体的数据实际上在后面讲堆内存开辟的字符串有提到,是整型最大值。不过单纯说受谁的限制,这个也可以作为讨论字面量的一条,只不过它没办法发挥作用了~能想到这一点还是不错滴~

我觉得栈里只是string的引用没有实际值。

没错,我在视频提了的哈,字面量的字符串存在常量池里面,因此受到常量池大小的限制。

另外那个结构体是怎么看到的,我查了好久不知道怎么看。

那个结构体你要去 Java 虚拟机规范里面找。字符串的值在字节码当中以这种结构存储,编码格式就是视频里面不断提到的 Modified-UTF-8

2
0

大厂资深面试官 带你破解Android高级面试

改变视野和思维 深度与广度兼备的 Android 进阶面试指导课程

1636 学习 · 222 问题

查看课程