开发者社区> 问答> 正文

javac 编译,得到"错误: 常量字符串过长",那么原因是什么呢?

javac 编译,得到"错误: 常量字符串过长",那么原因是什么呢?

展开
收起
vncamyi27xznk 2021-11-13 21:44:26 1002 0
2 条回答
写回答
取消 提交回答
  • 其实,这个原因在 javac 的代码中是可以找到的,在 Gen 类中有如下代码:

    private void checkStringConstant(DiagnosticPosition var1, Object var2) { if (this.nerrs == 0 && var2 != null && var2 instanceof String && ((String)v
    ar2).length() >= 65535) { this.log.error(var1, "limit.string", new Object[0]);
    ++this.nerrs;
    }
    }
    

    代码中可以看出,当参数类型为 String,并且长度大于等于 65535 的时候,就会导致编译失败。

    这个地方大家可以尝试着 debug 一下 javac 的编译过程(视频中有对 java 的编译过程进行 debug 的方法),也可以发现这个地方会报错。

    String如果我们尝试以 65534 个字符定义字符串,则会发现可以正常编译。

    资料来源:《Java工程师成神之路(基础篇)》,链接:https://developer.aliyun.com/topic/download?id=923

    2021-11-15 15:40:19
    赞同 展开评论 打赏
  • "其实,这个原因在 javac 的代码中是可以找到的,在 Gen 类中有如下代码: private void checkStringConstant(DiagnosticPosition var1, Object var2) { if (this.nerrs == 0 && var2 != null && var2 instanceof String && ((String)v ar2).length() >= 65535) { this.log.error(var1, ""limit.string"", new Object[0]); ++this.nerrs; } } 代码中可以看出,当参数类型为 String,并且长度大于等于 65535 的时候,就会导致编译失败。 这个地方大家可以尝试着 debug 一下 javac 的编译过程(视频中有对 java 的编译过程进行 debug 的方法),也可以发现这个地方会报错。 String 如果我们尝试以 65534 个字符定义字符串,则会发现可以正常编译。 资料来源:《Java工程师成神之路(基础篇)》,链接:https://developer.aliyun.com/topic/download?id=923"

    2021-11-15 14:48:13
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载