Java的String 长度最大为多少?

jinggangshi 2019-01-08 08:54:59
下述代码到字符串长度为20480时出了错

String str="一二三四五六七八九十";

while (str.length() < 65530&&str.trim().length()>0) {
System.out.println("字符串长度: " + str.length() + " : " + str);
str +=str;// "一二三四五六七八九十";
}

下述代码到字符串长度为4096时出了错

String str="1234567890";

while (str.length() < 65530&&str.trim().length()>0) {
System.out.println("字符串长度: " + str.length() + " : " + str);
str +=str;// "一二三四五六七八九十";
}

用的是UTF-8,Eclipse
不是说String可以长度到65534个字符么?
应该怎么处理?单个字符串最大不超过多少为好?

...全文
3194 35 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
35 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
中文字符 占 三个字节吗 大约三分之二呢
魅惑青花瓷 2020-07-10
  • 打赏
  • 举报
回复
字符串是utf-8编码,一个汉字三个字节,一个字母一个字节。 字符串是gbk编码时,一个汉字两个字节,一个字母一个字节。
weixin_42550121 2020-03-12
  • 打赏
  • 举报
回复
str+str...... 你这个常量池瞬间被沾满
jinggangshi 2019-04-12
  • 打赏
  • 举报
回复
谢谢各位,问题仍然没有搞明白。
我的测试结果是程序并不出错,但输出总有乱码,会不会是输出函数的问题?这个问题准备另开贴求教!
谢谢各位,只好平均分结贴了。
朱同学 2019-03-28
  • 打赏
  • 举报
回复
嗯 所以最大长度还是65534个字符
千里送人头 2019-03-28
  • 打赏
  • 举报
回复
楼主你好,java是开源的,你可以直接进入源码去查看,String的长度如果按照内存管理来理解的话, 一般不会分配太长,因为各种地方都会用的到,如果太长,反而浪费内存,如果有长文字的需求,肯定有对应的存放形式的,如:StringBuffer,类似于C++中的自定义分配空间大小.
kekuihuazi 2019-03-21
  • 打赏
  • 举报
回复
用stringbuilder
qq_39936465 2019-03-21
  • 打赏
  • 举报
回复
引用 楼主 jinggangshi 的回复:
下述代码到字符串长度为20480时出了错

String str="一二三四五六七八九十";

		while (str.length() < 65530&&str.trim().length()>0) {
			System.out.println("字符串长度: " + str.length() + "  :  " + str);
			str +=str;// "一二三四五六七八九十";
		}
下述代码到字符串长度为4096时出了错

String str="1234567890";

		while (str.length() < 65530&&str.trim().length()>0) {
			System.out.println("字符串长度: " + str.length() + "  :  " + str);
			str +=str;// "一二三四五六七八九十";
		}
用的是UTF-8,Eclipse 不是说String可以长度到65534个字符么? 应该怎么处理?单个字符串最大不超过多少为好?
这是因为eclipse的单行显示最大值的问题,如果你输出对象是文件就可以完整显示到40960,你也可以把程序放到命令行下执行 中文因为单个字符暂用内存较高,所以同样40960内存字节,中文个数较少,所以能单行显示到10240。 40960以上翻倍后超出 65534的最大值了所以无法显示。
PenkYang 2019-03-20
  • 打赏
  • 举报
回复
楼主,我用IDEA试过了,并没有长度限制呀
public class Test {

    public static void main(String[] args) {
        String str="1234567890";

        while (str.length() < 65530099 && str.trim().length()>0) {
            System.out.println("字符串长度: " + str.length());
            str +=str;// "一二三四五六七八九十";
        }
    }


"C:\Program Files\jdk1.8.0_121\bin\java" -Didea.launcher.port=7532 "-Didea.launcher.bin.path=F:\IntelliJ IDEA 2016.2.4\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\jdk1.8.0_121\jre\lib\charsets.jar;C:\Program Files\jdk1.8.0_121\jre\lib\deploy.jar;C:\Program Files\jdk1.8.0_121\jre\lib\ext\access-bridge-64.jar;C:\Program Files\jdk1.8.0_121\jre\lib\ext\cldrdata.jar;C:\Program Files\jdk1.8.0_121\jre\lib\ext\dnsns.jar;C:\Program Files\jdk1.8.0_121\jre\lib\ext\jaccess.jar;C:\Program Files\jdk1.8.0_121\jre\lib\ext\jfxrt.jar;C:\Program Files\jdk1.8.0_121\jre\lib\ext\localedata.jar;C:\Program Files\jdk1.8.0_121\jre\lib\ext\nashorn.jar;C:\Program Files\jdk1.8.0_121\jre\lib\ext\sunec.jar;C:\Program Files\jdk1.8.0_121\jre\lib\ext\sunjce_provider.jar;C:\Program Files\jdk1.8.0_121\jre\lib\ext\sunmscapi.jar;C:\Program Files\jdk1.8.0_121\jre\lib\ext\sunpkcs11.jar;C:\Program Files\jdk1.8.0_121\jre\lib\ext\zipfs.jar;C:\Program Files\jdk1.8.0_121\jre\lib\javaws.jar;C:\Program Files\jdk1.8.0_121\jre\lib\jce.jar;C:\Program Files\jdk1.8.0_121\jre\lib\jfr.jar;C:\Program Files\jdk1.8.0_121\jre\lib\jfxswt.jar;C:\Program Files\jdk1.8.0_121\jre\lib\jsse.jar;C:\Program Files\jdk1.8.0_121\jre\lib\management-agent.jar;C:\Program Files\jdk1.8.0_121\jre\lib\plugin.jar;C:\Program Files\jdk1.8.0_121\jre\lib\resources.jar;C:\Program Files\jdk1.8.0_121\jre\lib\rt.jar;E:\transmanage\target\classes;F:\Maven\repository_my\org\springframework\spring-core\5.1.0.RELEASE\spring-core-5.1.0.RELEASE.jar;F:\Maven\repository_my\org\springframework\spring-jcl\5.1.0.RELEASE\spring-jcl-5.1.0.RELEASE.jar;F:\Maven\repository_my\org\springframework\spring-web\5.1.0.RELEASE\spring-web-5.1.0.RELEASE.jar;F:\Maven\repository_my\org\springframework\spring-beans\5.1.0.RELEASE\spring-beans-5.1.0.RELEASE.jar;F:\Maven\repository_my\org\springframework\spring-webmvc\5.1.0.RELEASE\spring-webmvc-5.1.0.RELEASE.jar;F:\Maven\repository_my\org\springframework\spring-aop\5.1.0.RELEASE\spring-aop-5.1.0.RELEASE.jar;F:\Maven\repository_my\org\springframework\spring-context\5.1.0.RELEASE\spring-context-5.1.0.RELEASE.jar;F:\Maven\repository_my\org\springframework\spring-expression\5.1.0.RELEASE\spring-expression-5.1.0.RELEASE.jar;F:\Maven\repository_my\org\springframework\spring-jdbc\5.1.0.RELEASE\spring-jdbc-5.1.0.RELEASE.jar;F:\Maven\repository_my\org\springframework\spring-tx\5.1.0.RELEASE\spring-tx-5.1.0.RELEASE.jar;F:\Maven\repository_my\org\mybatis\mybatis\3.2.6\mybatis-3.2.6.jar;F:\Maven\repository_my\org\mybatis\mybatis-spring\1.2.2\mybatis-spring-1.2.2.jar;F:\Maven\repository_my\mysql\mysql-connector-java\5.1.30\mysql-connector-java-5.1.30.jar;F:\Maven\repository_my\com\alibaba\druid\1.1.12\druid-1.1.12.jar;F:\Maven\repository_my\org\codehaus\jackson\jackson-mapper-asl\1.9.13\jackson-mapper-asl-1.9.13.jar;F:\Maven\repository_my\org\codehaus\jackson\jackson-core-asl\1.9.13\jackson-core-asl-1.9.13.jar;F:\Maven\repository_my\javax\javaee-api\7.0\javaee-api-7.0.jar;F:\Maven\repository_my\com\sun\mail\javax.mail\1.5.0\javax.mail-1.5.0.jar;F:\Maven\repository_my\javax\activation\activation\1.1\activation-1.1.jar;F:\Maven\repository_my\org\springframework\spring-context-support\5.1.0.RELEASE\spring-context-support-5.1.0.RELEASE.jar;F:\Maven\repository_my\org\quartz-scheduler\quartz\2.2.1\quartz-2.2.1.jar;F:\Maven\repository_my\c3p0\c3p0\0.9.1.1\c3p0-0.9.1.1.jar;F:\Maven\repository_my\org\slf4j\slf4j-api\1.7.25\slf4j-api-1.7.25.jar;F:\Maven\repository_my\org\jsoup\jsoup\1.7.3\jsoup-1.7.3.jar;F:\Maven\repository_my\log4j\log4j\1.2.17\log4j-1.2.17.jar;F:\Maven\repository_my\com\alibaba\fastjson\1.1.41\fastjson-1.1.41.jar;F:\Maven\repository_my\org\slf4j\slf4j-log4j12\1.7.25\slf4j-log4j12-1.7.25.jar;F:\Maven\repository_my\org\apache\logging\log4j\log4j-api\2.10.0\log4j-api-2.10.0.jar;F:\Maven\repository_my\org\apache\logging\log4j\log4j-core\2.10.0\log4j-core-2.10.0.jar;F:\Maven\repository_my\org\apache\logging\log4j\log4j-web\2.9.1\log4j-web-2.9.1.jar;F:\Maven\repository_my\org\elasticsearch\client\transport\6.2.1\transport-6.2.1.jar;F:\Maven\repository_my\org\elasticsearch\elasticsearch\6.2.1\elasticsearch-6.2.1.jar;F:\Maven\repository_my\org\elasticsearch\plugin\transport-netty4-client\6.2.1\transport-netty4-client-6.2.1.jar;F:\Maven\repository_my\io\netty\netty-buffer\4.1.16.Final\netty-buffer-4.1.16.Final.jar;F:\Maven\repository_my\io\netty\netty-codec\4.1.16.Final\netty-codec-4.1.16.Final.jar;F:\Maven\repository_my\io\netty\netty-codec-http\4.1.16.Final\netty-codec-http-4.1.16.Final.jar;F:\Maven\repository_my\io\netty\netty-common\4.1.16.Final\netty-common-4.1.16.Final.jar;F:\Maven\repository_my\io\netty\netty-handler\4.1.16.Final\netty-handler-4.1.16.Final.jar;F:\Maven\repository_my\io\netty\netty-resolver\4.1.16.Final\netty-resolver-4.1.16.Final.jar;F:\Maven\repository_my\io\netty\netty-transport\4.1.16.Final\netty-transport-4.1.16.Final.jar;F:\Maven\repository_my\org\locationtech\spatial4j\spatial4j\0.6\spatial4j-0.6.jar;F:\Maven\repository_my\com\vividsolutions\jts\1.13\jts-1.13.jar;F:\Maven\repository_my\org\elasticsearch\jna\4.5.1\jna-4.5.1.jar;F:\Maven\repository_my\org\elasticsearch\plugin\reindex-client\6.2.1\reindex-client-6.2.1.jar;F:\Maven\repository_my\org\elasticsearch\client\elasticsearch-rest-client\6.2.1\elasticsearch-rest-client-6.2.1.jar;F:\Maven\repository_my\org\apache\httpcomponents\httpclient\4.5.2\httpclient-4.5.2.jar;F:\Maven\repository_my\org\apache\httpcomponents\httpcore\4.4.5\httpcore-4.4.5.jar;F:\Maven\repository_my\org\apache\httpcomponents\httpasyncclient\4.1.2\httpasyncclient-4.1.2.jar;F:\Maven\repository_my\org\apache\httpcomponents\httpcore-nio\4.4.5\httpcore-nio-4.4.5.jar;F:\Maven\repository_my\commons-codec\commons-codec\1.10\commons-codec-1.10.jar;F:\Maven\repository_my\commons-logging\commons-logging\1.1.3\commons-logging-1.1.3.jar;F:\Maven\repository_my\org\elasticsearch\plugin\lang-mustache-client\6.2.1\lang-mustache-client-6.2.1.jar;F:\Maven\repository_my\com\github\spullara\mustache\java\compiler\0.9.3\compiler-0.9.3.jar;F:\Maven\repository_my\org\elasticsearch\plugin\percolator-client\6.2.1\percolator-client-6.2.1.jar;F:\Maven\repository_my\org\elasticsearch\plugin\parent-join-client\6.2.1\parent-join-client-6.2.1.jar;F:\Maven\repository_my\org\elasticsearch\plugin\rank-eval-client\6.2.1\rank-eval-client-6.2.1.jar;F:\Maven\repository_my\org\elasticsearch\elasticsearch-core\6.2.1\elasticsearch-core-6.2.1.jar;F:\Maven\repository_my\org\apache\lucene\lucene-core\7.2.1\lucene-core-7.2.1.jar;F:\Maven\repository_my\org\apache\lucene\lucene-analyzers-common\7.2.1\lucene-analyzers-common-7.2.1.jar;F:\Maven\repository_my\org\apache\lucene\lucene-backward-codecs\7.2.1\lucene-backward-codecs-7.2.1.jar;F:\Maven\repository_my\org\apache\lucene\lucene-grouping\7.2.1\lucene-grouping-7.2.1.jar;F:\Maven\repository_my\org\apache\lucene\lucene-highlighter\7.2.1\lucene-highlighter-7.2.1.jar;F:\Maven\repository_my\org\apache\lucene\lucene-join\7.2.1\lucene-join-7.2.1.jar;F:\Maven\repository_my\org\apache\lucene\lucene-memory\7.2.1\lucene-memory-7.2.1.jar;F:\Maven\repository_my\org\apache\lucene\lucene-misc\7.2.1\lucene-misc-7.2.1.jar;F:\Maven\repository_my\org\apache\lucene\lucene-queries\7.2.1\lucene-queries-7.2.1.jar;F:\Maven\repository_my\org\apache\lucene\lucene-queryparser\7.2.1\lucene-queryparser-7.2.1.jar;F:\Maven\repository_my\org\apache\lucene\lucene-sandbox\7.2.1\lucene-sandbox-7.2.1.jar;F:\Maven\repository_my\org\apache\lucene\lucene-spatial\7.2.1\lucene-spatial-7.2.1.jar;F:\Maven\repository_my\org\apache\lucene\lucene-spatial-extras\7.2.1\lucene-spatial-extras-7.2.1.jar;F:\Maven\repository_my\org\apache\lucene\lucene-spatial3d\7.2.1\lucene-spatial3d-7.2.1.jar;F:\Maven\repository_my\org\apache\lucene\lucene-suggest\7.2.1\lucene-suggest-7.2.1.jar;F:\Maven\repository_my\org\elasticsearch\securesm\1.2\securesm-1.2.jar;F:\Maven\repository_my\org\elasticsearch\elasticsearch-cli\6.2.1\elasticsearch-cli-6.2.1.jar;F:\Maven\repository_my\net\sf\jopt-simple\jopt-simple\5.0.2\jopt-simple-5.0.2.jar;F:\Maven\repository_my\com\carrotsearch\hppc\0.7.1\hppc-0.7.1.jar;F:\Maven\repository_my\joda-time\joda-time\2.9.9\joda-time-2.9.9.jar;F:\Maven\repository_my\org\yaml\snakeyaml\1.17\snakeyaml-1.17.jar;F:\Maven\repository_my\com\fasterxml\jackson\core\jackson-core\2.8.10\jackson-core-2.8.10.jar;F:\Maven\repository_my\com\fasterxml\jackson\dataformat\jackson-dataformat-smile\2.8.10\jackson-dataformat-smile-2.8.10.jar;F:\Maven\repository_my\com\fasterxml\jackson\dataformat\jackson-dataformat-yaml\2.8.10\jackson-dataformat-yaml-2.8.10.jar;F:\Maven\repository_my\com\fasterxml\jackson\dataformat\jackson-dataformat-cbor\2.8.10\jackson-dataformat-cbor-2.8.10.jar;F:\Maven\repository_my\com\tdunning\t-digest\3.0\t-digest-3.0.jar;F:\Maven\repository_my\org\hdrhistogram\HdrHistogram\2.1.9\HdrHistogram-2.1.9.jar;F:\Maven\repository_my\org\springframework\data\spring-data-elasticsearch\3.1.0.RELEASE\spring-data-elasticsearch-3.1.0.RELEASE.jar;F:\Maven\repository_my\org\springframework\data\spring-data-commons\2.1.0.RELEASE\spring-data-commons-2.1.0.RELEASE.jar;F:\Maven\repository_my\com\fasterxml\jackson\core\jackson-databind\2.9.7\jackson-databind-2.9.7.jar;F:\Maven\repository_my\com\fasterxml\jackson\core\jackson-annotations\2.9.0\jackson-annotations-2.9.0.jar;F:\IntelliJ IDEA 2016.2.4\lib\idea_rt.jar" com.intellij.rt.execution.application.AppMain com.eddie.test.Test
字符串长度: 10
字符串长度: 20
字符串长度: 40
字符串长度: 80
字符串长度: 160
字符串长度: 320
字符串长度: 640
字符串长度: 1280
字符串长度: 2560
字符串长度: 5120
字符串长度: 10240
字符串长度: 20480
字符串长度: 40960
字符串长度: 81920
字符串长度: 163840
字符串长度: 327680
字符串长度: 655360
字符串长度: 1310720
字符串长度: 2621440
字符串长度: 5242880
字符串长度: 10485760
字符串长度: 20971520
}
kekuihuazi 2019-01-14
  • 打赏
  • 举报
回复
考虑用stringbuilder
甚悦 2019-01-14
  • 打赏
  • 举报
回复
这样跑到后面不得卡死啊
qq_44337069 2019-01-13
  • 打赏
  • 举报
回复
40960个左右吧。
petit_wu 2019-01-12
  • 打赏
  • 举报
回复
string一般用起来都不会有长度限制吧?
「已注销」 2019-01-12
  • 打赏
  • 举报
回复
StringBuffer
sinat_27982395 2019-01-11
  • 打赏
  • 举报
回复
可以考虑用stringbuilder
weixin_44496428 2019-01-11
  • 打赏
  • 举报
回复
出40960个。应该就是这么多
Csdn技术大神 2019-01-10
  • 打赏
  • 举报
回复
都是理论上的实际测试可能会不一样的
jinggangshi 2019-01-10
  • 打赏
  • 举报
回复
引用 15 楼 qq_33486718 的回复:
这种情况下,可以考虑下改用StringBuilder
用StringBuilder的测试结果一样的
安静的码字猴 2019-01-10
  • 打赏
  • 举报
回复
昨天刚遇到一个问题,发现如果常量字符串数据超过一M,就会报错
jinggangshi 2019-01-10
  • 打赏
  • 举报
回复
引用 12 楼 LCL_data 的回复:
[quote=引用 10 楼 jinggangshi 的回复:] 谢谢各位的回复,我 [quote=引用 4 楼 木偶匹诺曹 的回复:] 使用非ASCII字符会占用更多的位置的。如果真的要用这么多的字符,那个人建议把它们写到文件中再去读。至于第二个使用数字字符也只能到40960,是因为40960*2>65534了,它直接报错中断了,所以只显示出40960个。
我用.getBytes()也出错,一会贴出测试代码[/quote] show your code[/quote]

	public static boolean extravasation(String str) {

		String str1="";
		String str2=str;
		while (str2.getBytes().length < 4096 ) {
			if (str2.getBytes().length <2048){
				str1=str2;
				str2+=str2;
			}
			else if (str2.getBytes().length  < 3072)
			{
				str2+=str1;
			}
			else
				str2+=str;
			System.out.println("字符串长度: " + str2.getBytes().length + "  :  " + str2);

		}
		return false;
	}
调用

extravasation("1");//“米”
这是对于纯数字的情况,如果汉字,长度用65534测试,2048改为20480,相应3072也改大为40960。 结果,纯数字在4094后输出乱码。 带汉字的则会超过4094,但乱码的位置大约在65000左右,这个准确的数值还要进一步测试。
加载更多回复(15)

62,634

社区成员

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

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