String的contains报错。。。

Gray_Sky 2011-03-10 10:42:22
在项目中由于一个sql很长,然后用它做contains时就报错了。。。有没有人有过同样的经历?
...全文
233 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Gray_Sky 2011-03-14
  • 打赏
  • 举报
回复
谢谢各位,我已经选择绕道而行!结贴了。。
hardsonxu 2011-03-11
  • 打赏
  • 举报
回复
关键是看报的错误是什么。java对字符串长度没有限制,如果真的报错,只能是内存溢出错误
youjianbo_han_87 2011-03-11
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 hardsonxu 的回复:]

关键是看报的错误是什么。java对字符串长度没有限制,如果真的报错,只能是内存溢出错误
[/Quote]

java对字符串长度是有限制的。

下面是javaEye一个朋友的解释。。

在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=65536。然而实际测试表明,允许的最大长度仅为65534,超过就编译错误了,有兴趣可以写段代码试试。
hardsonxu 2011-03-11
  • 打赏
  • 举报
回复
谢谢楼上的朋友,长见识了
Gray_Sky 2011-03-10
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 colachens 的回复:]
Java code

StringBuffer bf1=new StringBuffer(0);
for (int i = 0; i < 1000000; i++) {
bf1.append(i);
}

StringBuffer bf2=new StringBuffer(0);
……
[/Quote]

其实在自己写的测试类中我用的同样的语句,同样的方法,但是不报错,这点比较奇怪!
colachens 2011-03-10
  • 打赏
  • 举报
回复

StringBuffer bf1=new StringBuffer(0);
for (int i = 0; i < 1000000; i++) {
bf1.append(i);
}

StringBuffer bf2=new StringBuffer(0);
for (int i = 0; i < 1000000; i++) {
bf2.append(i);
}

System.out.println(bf1.toString().contains(bf2.toString()));


两个加起来 已经 2000000 了,没报错
超过了可能 会报错

你的sql 长度有 2000000

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧