1.Java中的字符串String最大长度,编译期如果是javac编译就是65534。如果绕过javac编译的限制,其最大长度可以达到u2类型变达的最大值65535。

Oracle JDK的编译工具Javac内部,javac也是java写的

private void checkStringConstant(DiagnosticPosition pos, Object constValue) {

if (nerrs != 0 || // only complain about a long string once

constValue == null ||

!(constValue instanceof String) ||

((String)constValue).length() < Pool.MAX_STRING_LENGTH)

return;

log.error(pos, "limit.string");

nerrs++;

}

在看看Pool.MAX_STRING_LENGTH

public class Pool {

...

public static final int MAX_STRING_LENGTH = 0xFFFF;

...

}

通过上边代码可以看到 MAX_STRING_LENGTH = 0xFFFF 而 0xFFFF 是十进制的 65535。但是上面我们得出的结果是Javac编译下最大长度是65534,是因为 Javac 源码中做的限制是((String)constValue).length() < Pool.MAX_STRING_LENGTH) 注意是 < 而不是 <= , 小于65535那自然最多只能是65534了。

但是U2类型能表达的最大值是65535。上面65535个长度的字符串在javac下报错了是受到了javac编译器的限制了。如果你在上面65534长度生成的TestStr.class中手动在添加一个字符串(注意是在javac编译后的class文件中添加)是可以得到65535长度的结果。

2.Java中的字符串String最大长度运行期大约4G。

3.Eclise编译超过65534长度的字符串不报错,是Eclipse有自己的Java编译器。JDT优化为了StringBuilder的append。

6: invokespecial #20; //Method java/lang/StringBuilder."":(Ljava/la

ng/String;)V

9: ldc #23; //String QyNDAbAgIGqQIBAQ1

11: invokevirtual #25; //Method java/lang/StringBuilder.append:(Ljava/lang

/String;)Ljava/lang/StringBuilder;

14: invokevirtual #29; //Method java/lang/StringBuilder.toString:()Ljava/l

ang/String;

17: invokevirtual #33; //Method java/lang/String.intern:()Ljava/lang/Strin

g;

20: astore_1

21: getstatic #38; //Field java/lang/System.out:Ljava/io/PrintStream;

24: aload_1

25: invokevirtual #44; //Method java/lang/String.length:()I

28: invokevirtual #48; //Method java/io/PrintStream.println:(I)V

31: return

}

4.Eclise使用自己的编译器。主要原因是JDT核心具有渐进式编译的能力,这意味着它会逐步编译代码中的更改(这也是Eclipse不需要编译按钮的原因,因为它会在检测到更改时自动编译)。但Oracle的JDK不支持增量编译。

java字符串长度_Java中String字符串的最大长度?相关推荐

  1. java 字符串 面试_JAVA中String介绍及常见面试题小结

    字符串广泛应用 在 Java 编程中,在 Java 中字符串属于对象,Java 提供了 String 类来创建和操作字符串. 深刻认识String 1)String为字符串常量:即String对象一旦 ...

  2. java打印字符串引用_Java中的字符串及其中的常用方法

    字符串是由多个字符组成的一串数据 String的特点: 字符串是常量,一旦被创建就不能改变,这是因为字符串的值是存放在方法区的常量池里面,但是引用可以改变.字符串字面值"ab"也可 ...

  3. java字符截取_java中截取字符串方法

    Java 简介 substring public String substring(int beginIndex) 返回一个新的字符串,它是此字符串的一个子字符串.该子字符串始于指定索引处的字符,一直 ...

  4. java字符连接字符串数组_Java中连接字符串的最佳方法

    java字符连接字符串数组 最近有人问我这个问题–在Java中使用+运算符连接字符串是否对性能不利? 这让我开始思考Java中连接字符串的不同方法,以及它们如何相互对抗. 这些是我要研究的方法: 使用 ...

  5. java字符串转字符串列表_Java中的字符串列表示例

    java字符串转字符串列表 We have to read total number string i.e. "n", create a list of the Strings a ...

  6. java 字符串驻留_Java中的字符串驻留

    最近在工作的时候,一句再正常不过的代码String a = "hello" + "world";被改成了new StringBuilder().append(& ...

  7. java 字符串 判断_Java中判断字符串是否相等的实现

    在最近的开发中,我踩到一个坑,过程是这样的.我需要在Java中判断两个字符串是否相等,按照以往的经历使用 == 双等号的操作符来判断,但是在Java中,这样写却没有实现我想要的效果.经过查阅资料后,把 ...

  8. java 字符串用法_Java中的字符串用法小结

    本文实例总结了Java中的字符串用法.分享给大家供大家参考.具体分析如下: 字符串的本质是char类型的数组,但在java中,所有用双引号""声明的字符串都是一个String类的对 ...

  9. java定义字符串常量_Java中的字符串常量池

    ava中字符串对象创建有两种形式,一种为字面量形式,如String str = "droid";,另一种就是使用new这种标准的构造对象的方法,如String str = new ...

最新文章

  1. View Transform(视图变换)详解
  2. 如何入门Go语言?这个开源项目赶紧收藏!
  3. The alias LM/W3SVC/1/Root/XX already exists. Please choose a different alias
  4. Bugku——Web——矛盾
  5. 消息队列rabitMq
  6. 用户视角看百度移动:从流量集散地到流量目的地
  7. 利用Eclipse的Update组件实现适合企业应用的更新组件(1)
  8. 21-5-22校赛G 自行车调度
  9. 矩阵学习摘记,欢迎指正
  10. Teams App设备的地理位置能力
  11. “自启动”树莓派上的 .NET Core 3.0 环境
  12. CF570D-Tree Requests【长链剖分】
  13. 经典面试题之 TCP三次握手 和 TCP四次挥手过程----详解
  14. IOS UI Automation 学习之常用类,方法和模拟手势
  15. ubuntu下mysql整个数据库备份与还原
  16. mysql配置my.cnf文件,以及参数优化提升性能
  17. Axure 9 Mac 版
  18. 2022年最新最全软件测试面试题大全
  19. 忘记电脑开机密码怎么办、win10、win7忘记开机密码怎么解决
  20. android 系统安装教程视频,PC也能用安卓 X86系统装安卓视频教程

热门文章

  1. js关于safari浏览器日期转时间戳的问题
  2. c语言常用英语带音标,计算机c语言常见英语单词 带音标.doc
  3. 数据挖掘思维和实战17 实践 2:如何使用 word2vec 和 k-mean 聚类寻找相似的城市
  4. 参加oschina成都MIT Talk得到的收获
  5. 破解版3D建模软件下载集合
  6. MySQL笔记 干货,未完结(持续更新)
  7. java架构师主要是干什么的?
  8. springboot项目报错:ERROR 9112 --- [nio-8080-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet] 的解决办法
  9. 孕妇有什么副业做?孕妇在家有哪些兼职可以做?
  10. pom中配置maven仓库(阿里仓库)