String能表示的最大长度是多少啊?高手指点……

解决方案 »

  1.   

    没有限定,主要跟机器和java虚拟机有关系!
      

  2.   

    String的length()返回int,就是说它的长度不能超过int的最大值
      

  3.   

    剽来的:
    String 类型安标准来说没有长度限制,但是一般jdk中String的最大长度是4G。
      

  4.   

    那是不是说天有多大,String就有多长啊。   呵呵
      

  5.   

    偶记得JLS里面说得是 65535 就是上限了
      

  6.   

    String 的最大长度应该是与 Integer.MAX_VALUE 相等的
      

  7.   

    理论上来说是没有上限的,
    但是JAVA中int值最大就也是Integer.MAX_VALUE,所以,它最长可以这么长
      

  8.   

    我觉得不一定是 Integer.MAX_VALUE ,超过长度之后String应该仍然能够存储,但是length()方法就会报异常了
      

  9.   

    知道它很多就行了
    谁有机会用到4G的String啊?
    我有台牛机
    4G内存
    什么事不用做就搞这个4G的String
    呵呵
      

  10.   

    我的答案是大约30000000你这个问题其实是问一个char数组能允许多少长。
    下面是String的部分源码
    public final class String
        implements java.io.Serializable, Comparable<String>, CharSequence
    {
        /** The value is used for character storage. */
        private char value[];  省略
        public String(char value[]) {
            this.count = value.length;
            this.value = new char[count];
            System.arraycopy(value, 0, this.value, 0, count);
        }
        public String(String original) {
      this.count = original.count;
      if (original.value.length > this.count) {
                this.value = new char[this.count];
          System.arraycopy(original.value, original.offset,
           this.value, 0, this.count);
      } else {
          this.value = original.value;
      }
        }}那么一个数组到底循序多少大呢
    我的测试代码
    class t 
    {
    public static void main(String[] args) 
    {
    System.out.println("Hello World!");
    char[] a=new char[10L];
    }
    }编译不通过:报错
    required: int测试代码2
    class t 
    {
    public static void main(String[] args) 
    {
        char[] a=new char[Integer.MAX_VALUE];
    }
    }
    编译通过 执行报error
    ---------- Java ----------
    java.lang.OutOfMemoryError: Requested array size exceeds VM limit
    Exception in thread "main" 
    Output completed (0 sec consumed) - Normal Terminationc测试代码3
    class t 
    {
    public static void main(String[] args) 
    {
    int i=0;   while((i=i+10000000)>-1){
        char[] a=new char[i];
    System.out.println(i);
       }
    }
    }
    执行报错
    ---------- Java ----------
    10000000
    20000000
    30000000
    java.lang.OutOfMemoryError: Java heap space
    Exception in thread "main" 
    Output completed (0 sec consumed) - Normal Termination关于java heap大小的由来 我就不带懂了等jvm达人出现
      

  11.   

    测试环境 jdk1.5测试版 +editPlus
      

  12.   

    String.length()方法是带返回参数的,查Java的API文档可以查到它的返回类型,返回类型决定了它能表示的最大长度,当然这个问题意义不大了,很大的字符串用String对象太不方便了,呵呵,欢迎各位有志之士加入程序讨论群,共同进步,32998944(程序人生);
      

  13.   

    确实应该是 4G。之所以 syoumei(赚满1000专家分去考认证) 没有做到,是因为他执行程序的时候没有修改 JVM 的参数。把内存最大值分配得更多,他就能得到更长的字符串。问题是 JVM 到底能不能管理 4G 的内存呢?
      

  14.   

    OutofMemory这个错误并不是因为JVM管理不了这么多内存,而是管理什么样的内存String里面存储的实际上是一个byte数组。数组要求是连续的内存空间。如果你一次申请4M的连续内存,一般都会成功,但如果要申请1G连续的内存,往往会失败。失败时就会报错OutofMemory,其实并不是内存不够用了,你看一下内存,其实还有很多,但连续的不够了。而且String在操作的时候是通过System.arraycopy来实现的,那样经常需要两个这样大小的连续内存,更容易出问题。所以实际上String的长度不会太大,但理论上应该可以达到4G。当然这需要你有足够多的连续内存供其申请才可以。所以syoumei的测试说明不了问题,也不像YidingHe讲的那样是jvm管理的问题
      

  15.   

    String 是有长度限制的,StringBuffer也有长度限制的,以前做项目的时候碰到过
      

  16.   

    关于我的测试首先要注意的是30000000这个数字
    30000000个char的空间申请是通过的
    我计算了下是7个G 大大超过有的网友提出的4G
    如果使用java -xmx100m t 则能跑到40000000其实要注意的是2次相同异常类型的不同报错java.lang.OutOfMemoryError: Requested array size exceeds VM limit
    我想虚拟机应该对char数组的长度定义是有一个硬性限制的 
    这个限制应该小于Integer.MAX_VALUEjava.lang.OutOfMemoryError: Java heap space