java字符串的最大长度 -凯发k8网页登录

生活、程序、未来
   :: 凯发k8网页登录首页 ::  ::  :: 聚合  :: 管理
posted on 2009-01-15 01:37 dennis 阅读(62398) 评论(7)     所属分类: java源码解读
    在cpp中为了可移植性,string的长度是string::size_type,突然就想知道java允许的最大字符串长度为多少。看string的源码:
public final class string
  
110       implements java.io.serializable, comparable<string>, charsequence
  
111   {
  
112       /** the value is used for character storage. */
  
113       private final char value[];
  
114   
  
115       /** the offset is the first index of the storage that is used. */
  
116       private final int offset;
  
117   
  
118       /** the count is the number of characters in the string. */
  
119       private final int count;
   string内部是以char数组的形式存储,数组的长度是int类型,那么string允许的最大长度就是integer.max_value了。又由于java中的字符是以16位存储的,因此大概需要4gb的内存才能存储最大长度的字符串。不过这仅仅是对字符串变量而言,如果是字符串字面量(string literals),如“abc"、"1a2b"之类写在代码中的字符串literals,那么允许的最大长度取决于字符串在常量池中的存储大小,也就是字符串在class格式文件中的存储格式:
constant_utf8_info {
        u1 tag;
        u2 length;
        u1 bytes[length];
}

    u2是无符号的16位整数,因此理论上允许的string literal的最大长度是2^16-1=65535。然而实际测试表明,允许的最大长度仅为65534,超过就编译错误了,有兴趣可以写段代码试试,估计是length还不能为0。


评论

# re: java字符串的最大长度  回复     

2009-01-15 10:06 by
准备搞cpp了吧

# re: java字符串的最大长度  回复     

2009-01-31 14:57 by jack.wang
lz是否知道 str 超过 65534 编译错误?

# re: java字符串的最大长度  回复  更多评论   

2009-03-19 18:53 by dennis
@jack.wang
您根本就没看我的blog内容就急急忙忙地评论了吧

# re: java字符串的最大长度  回复     

2011-10-19 16:37 by
很好,对我有用

# re: java字符串的最大长度  回复     

2014-12-30 18:34 by
null占用两个位置,所以是65534

# re: java字符串的最大长度  回复     

2016-04-25 15:28 by
utryrt

# re: java字符串的最大长度  回复     

2016-06-17 15:35 by
写得很好

只有注册用户后才能发表评论。


网站导航:
              
相关文章:
 
网站地图