当前位置: 首页 > news >正文

微信服务号菜单链接网站怎么做公司注册网上注册怎么做

微信服务号菜单链接网站怎么做,公司注册网上注册怎么做,网页制作三剑客指的是,合肥手机网站制作这是我的第 199 期分享作者 | Hollis来源 | Hollis#xff08;ID#xff1a;hollischuang#xff09; 分享 | Java中文社群#xff08;ID#xff1a;javacn666#xff09;关于String有没有长度限制的问题#xff0c;我之前单独写过一篇文章分析过#xff0c;最近我又抽… 这是我的第 199 期分享作者 | Hollis来源 | HollisIDhollischuang 分享 | Java中文社群IDjavacn666关于String有没有长度限制的问题我之前单独写过一篇文章分析过最近我又抽空回顾了一下这个问题发现又有了一些新的认识。于是准备重新整理下这个内容。这次在之前那篇文章的基础上除了增加了一些验证过程外还有些错误内容的修正。我这次在分析过程中会尝试对Jdk的编译过程进行debug并且会参考一些JVM规范等全方面的介绍下这个知识点。String的长度限制想要搞清楚这个问题首先我们需要翻阅一下String的源码看下其中是否有关于长度的限制或者定义。String类中有很多重载的构造函数其中有几个是支持用户传入length来执行长度的public String(byte bytes[], int offset, int length)  可以看到这里面的参数length是使用int类型定义的那么也就是说String定义的时候最大支持的长度就是int的最大范围值。根据Integer类的定义java.lang.Integer#MAX_VALUE的最大值是2^31 - 1;那么我们是不是就可以认为String能支持的最大长度就是这个值了呢其实并不是这个值只是在运行期我们构造String的时候可以支持的一个最大长度而实际上在运行期定义字符串的时候也是有长度限制的。如以下代码String s  11111...1111;//其中有10万个字符1 当我们使用如上形式定义一个字符串的时候当我们执行javac编译时是会抛出异常的提示如下错误: 常量字符串过长 那么明明String的构造函数指定的长度是可以支持2147483647(2^31 - 1)的为什么像以上形式定义的时候无法编译呢其实形如String s xxx;定义String的时候xxx被我们称之为字面量这种字面量在编译之后会以常量的形式进入到Class常量池。那么问题就来了因为要进入常量池就要遵守常量池的有关规定。常量池限制我们知道javac是将Java文件编译成class文件的一个命令那么在Class文件生成过程中就需要遵守一定的格式。根据《Java虚拟机规范》中第4.4章节常量池的定义CONSTANT_String_info 用于表示 java.lang.String 类型的常量对象格式如下CONSTANT_String_info {u1 tag;u2 string_index;} 其中string_index 项的值必须是对常量池的有效索引 常量池在该索引处的项必须是 CONSTANT_Utf8_info 结构表示一组 Unicode 码点序列这组 Unicode 码点序列最终会被初始化为一个 String 对象。CONSTANT_Utf8_info 结构用于表示字符串常量的值CONSTANT_Utf8_info {u1 tag;u2 length;u1 bytes[length];} 其中length则指明了 bytes[]数组的长度其类型为u2通过翻阅《规范》我们可以获悉。u2表示两个字节的无符号数那么1个字节有8位2个字节就有16位。16位无符号数可表示的最大值位2^16 - 1 65535。也就是说Class文件中常量池的格式规定了其字符串常量的长度不能超过65535。那么我们尝试使用以下方式定义字符串 String s  11111...1111;//其中有65535万个字符1 尝试使用javac编译同样会得到错误: 常量字符串过长那么原因是什么呢其实这个原因在javac的代码中是可以找到的在Gen类中有如下代码private void checkStringConstant(DiagnosticPosition var1, Object var2) {if (this.nerrs  0  var2 ! null  var2 instanceof String          ((String)var2).length()  65535) {this.log.error(var1, limit.string, new Object[0]);this.nerrs;}} 代码中可以看出当参数类型为String并且长度大于等于65535的时候就会导致编译失败。这个地方大家可以尝试着debug一下javac的编译过程视频中有对java的编译过程进行debug的方法也可以发现这个地方会报错。如果我们尝试以65534个字符定义字符串则会发现可以正常编译。其实关于这个值在《Java虚拟机规范》也有过说明if the Java Virtual Machine code for a method is exactly 65535 bytes long and ends with an instruction that is 1 byte long, then that instruction cannot be protected by an exception handler. A compiler writer can work around this bug by limiting the maximum size of the generated Java Virtual Machine code for any method, instance initialization method, or static initializer (the size of any code array) to 65534 bytes运行期限制上面提到的这种String长度的限制是编译期的限制也就是使用String s “”;这种字面值方式定义的时候才会有的限制。那么String在运行期有没有限制呢答案是有的就是我们前文提到的那个Integer.MAX_VALUE 这个值约等于4G在运行期如果String的长度超过这个范围就可能会抛出异常。(在jdk 1.9之前int 是一个 32 位变量类型取正数部分来算的话他们最长可以有2^31-1 2147483647 个 16-bit Unicodecharacter2147483647 * 16  34359738352 位34359738352 / 8  4294967294 (Byte)4294967294 / 1024  4194303.998046875 (KB)4194303.998046875 / 1024  4095.9999980926513671875 (MB)4095.9999980926513671875 / 1024  3.99999999813735485076904296875 (GB) 有近 4G 的容量。很多人会有疑惑编译的时候最大长度都要求小于65535了运行期怎么会出现大于65535的情况呢。这其实很常见如以下代码String s  ;for (int i  0; i 100000 ; i) {si;} 得到的字符串长度就有10万另外我之前在实际应用中遇到过这个问题。之前一次系统对接需要传输高清图片约定的传输方式是对方将图片转成BASE6编码我们接收到之后再转成图片。在将BASE64编码后的内容赋值给字符串的时候就抛了异常。总结字符串有长度限制在编译期要求字符串常量池中的常量不能超过65535并且在javac执行过程中控制了最大值为65534。在运行期长度不能超过Int的范围否则会抛异常。最后这个知识点 我录制了视频其中有关于如何进行实验测试、如何查阅Java规范以及如何对javac进行deubg的技巧。欢迎进一步学习。视频https://www.bilibili.com/video/BV1uK4y1t7H1/往期推荐String性能提升10倍的几个方法(源码原理分析)别再问我 new 字符串创建了几个对象了我来证明给你看关注公众号发送”进群“磊哥拉你进读者群。
http://www.zqtcl.cn/news/673325/

相关文章:

  • 青岛做网站公wordpress文章付费阅读
  • 小灯具网站建设方案360优化大师
  • 开发公司与物业公司前期合同网站优化的推广
  • 汉堡云虚拟主机aso安卓优化公司
  • 医院 网站建设 新闻营销外包
  • 优秀网站网址郑州无痛人流哪家医院好
  • 备案网站能打开吗大良营销网站建设流程
  • 哪些网站可以做淘宝店招石油网站编辑怎么做
  • 网站出现建设中集团网站建设特点
  • asp网站开发 pdf企业展厅设计公司盛世笔特
  • 怎么创建网站 免费的免费开源的网站系统
  • 中山精品网站建设资讯网页设计师就业趋势
  • 网站建设哪家好 万维科技wordpress广告公司模板
  • 如何选择建网站公司网站页面html静态化
  • 建设银行网站入口网页设计培训 周末双休
  • 做企业网站建设的公司为什么企业网站不是开源系统
  • 网站客户端怎么做的做汽车脚垫版的网站
  • 做数学题挣钱的网站广西建筑特种作业证件查询官网
  • 汉字叔叔花了多少钱做网站免费原创视频素材
  • 网站开发提现功能互联网推广工作好做吗
  • 做阿里渠道的销售要有哪些网站网站评论怎么做的
  • 建设中网站如何上传图片深圳营销型网站建设设计公司
  • 建设电商网站需要多少钱家具网页设计素材
  • 物流网站html5模板网站整站开发
  • 网站随机代码网站开发技术试验教程
  • 做翻译 网站吗仿京东电商的网站开发报价
  • 霞山网站建设公司网站开发怎样手机号验证
  • 大型门户网站建设苏州优化网站建设
  • 网站步骤怎么搭建个人网站
  • 荥阳网站建设公司wordpress会员上限