String 长度问题。 String能表示的最大长度是多少啊?高手指点…… 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 没有限定,主要跟机器和java虚拟机有关系! String的length()返回int,就是说它的长度不能超过int的最大值 剽来的:String 类型安标准来说没有长度限制,但是一般jdk中String的最大长度是4G。 那是不是说天有多大,String就有多长啊。 呵呵 偶记得JLS里面说得是 65535 就是上限了 String 的最大长度应该是与 Integer.MAX_VALUE 相等的 理论上来说是没有上限的,但是JAVA中int值最大就也是Integer.MAX_VALUE,所以,它最长可以这么长 我觉得不一定是 Integer.MAX_VALUE ,超过长度之后String应该仍然能够存储,但是length()方法就会报异常了 知道它很多就行了谁有机会用到4G的String啊?我有台牛机4G内存什么事不用做就搞这个4G的String呵呵 我的答案是大约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测试代码2class t { public static void main(String[] args) { char[] a=new char[Integer.MAX_VALUE]; }}编译通过 执行报error---------- Java ----------java.lang.OutOfMemoryError: Requested array size exceeds VM limitException in thread "main" Output completed (0 sec consumed) - Normal Terminationc测试代码3class 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 ----------100000002000000030000000java.lang.OutOfMemoryError: Java heap spaceException in thread "main" Output completed (0 sec consumed) - Normal Termination关于java heap大小的由来 我就不带懂了等jvm达人出现所 测试环境 jdk1.5测试版 +editPlus String.length()方法是带返回参数的,查Java的API文档可以查到它的返回类型,返回类型决定了它能表示的最大长度,当然这个问题意义不大了,很大的字符串用String对象太不方便了,呵呵,欢迎各位有志之士加入程序讨论群,共同进步,32998944(程序人生); 确实应该是 4G。之所以 syoumei(赚满1000专家分去考认证) 没有做到,是因为他执行程序的时候没有修改 JVM 的参数。把内存最大值分配得更多,他就能得到更长的字符串。问题是 JVM 到底能不能管理 4G 的内存呢? OutofMemory这个错误并不是因为JVM管理不了这么多内存,而是管理什么样的内存String里面存储的实际上是一个byte数组。数组要求是连续的内存空间。如果你一次申请4M的连续内存,一般都会成功,但如果要申请1G连续的内存,往往会失败。失败时就会报错OutofMemory,其实并不是内存不够用了,你看一下内存,其实还有很多,但连续的不够了。而且String在操作的时候是通过System.arraycopy来实现的,那样经常需要两个这样大小的连续内存,更容易出问题。所以实际上String的长度不会太大,但理论上应该可以达到4G。当然这需要你有足够多的连续内存供其申请才可以。所以syoumei的测试说明不了问题,也不像YidingHe讲的那样是jvm管理的问题 String 是有长度限制的,StringBuffer也有长度限制的,以前做项目的时候碰到过 关于我的测试首先要注意的是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 在applet中在一个矩形中画圆?(我是新手) 关于在 Myeclipse 中, .jsp的创建 GUI设计问题,在线等? 关于Java播放WAV。 java时间问题 怎么编写一个不规则的表格,请教代码高手! 请问有无不用单元渲染可以在JTable中加上JCheckBox的方法?!!! 高分 Java数据库编程的问题,欢迎大家讨论。 applet 能不能直接访问在不同机器上的orace 数据库???(紧急求助!!!) 请问怎么样才能在一个byte[]中找到想要的一个字符串位置呢? 不同类之间的数据调用问题 %和复合赋值的问题!
String 类型安标准来说没有长度限制,但是一般jdk中String的最大长度是4G。
但是JAVA中int值最大就也是Integer.MAX_VALUE,所以,它最长可以这么长
谁有机会用到4G的String啊?
我有台牛机
4G内存
什么事不用做就搞这个4G的String
呵呵
下面是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达人出现
所
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