【java】String相关面试题
1、字符串长度是否有限制,如果有最大长度是多少?
首先,字符串的内容是由一个char[]
来存储的,由于数组的长度及索引是整数,且String
类中返回字符串长度的方法length()
的返回值也是int
,所以通过查看java源码中的类Integer
我们可以看到Integer
的最大范围是2^31 -1
,由于数组是从0开始的,所以数组的最大长度可以使[0~2^31] 通过计算是大概4GB
。
但是通过翻阅java虚拟机手册对class文件格式的定义以及常量池中对String
类型的结构体定义我们可以知道对于索引定义了u2
,就是无符号占2个字节,2个字节可以表示的最大范围是2^16 -1 = 65535。
其实是65535,但是由于JVM
需要1个字节表示结束指令,所以这个范围就为65534了。超出这个范围在编译时期是会报错的,但是运行时拼接或者赋值的话范围是在整形的最大范围。
好学若饥,谦卑若愚