A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© up_ 中级黑马   /  2012-10-24 10:08  /  2451 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

如果有是跟那种基本类型一致的?

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1 赞一个!

查看全部评分

4 个回复

倒序浏览
限制有的但是很大,不过应为你string算长度返回的是int类型,int类型最大值2147483646(2的31次方再减一),如果超过就报异常了

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1 赞一个!

查看全部评分

回复 使用道具 举报
本帖最后由 李连闯 于 2012-11-27 11:35 编辑

帮楼主找了份说明感觉说得很好,供参考:查看String源代码可以得知类String中是使用域 count 来记录对象字符的数量,而count 的类型为 int,因此,我们可以推测最长的长度为 2的31次方(因为int型的长度是32位,二进制来讲第一位是标记位,标记正负,正数第一位是0,不改变,所以有效位是31位)。
不过,我们在编写源代码的时候,如果使用 Sting str = "aaaa";的形式定义一个字符串,那么双引号里面的ASCII字符最多只能有 65534 个。为什么呢?因为在class文件的规范中, CONSTANT_Utf8_info表中使用一个16位的无符号整数来记录字符串的长度的,最多能表示 65536个字节,而java class 文件是使用一种变体UTF-8格式来存放字符的,null值使用两个字节来表示,因此只剩下 65536- 2 = 65534个字节。也正是变体UTF-8的原因,如果字符串中含有中文等非ASCII字符,那么双引号中字符的数量会更少(一个中文字符占用三个字节)。如果超出这个数量,在编译的时候编译器会报错。

评分

参与人数 1技术分 +1 黑马币 +5 收起 理由
邓艳秋 + 1 + 5 很给力!

查看全部评分

回复 使用道具 举报
lilianchuang 发表于 2012-10-24 12:34
帮楼主找了份说明感觉说得很好,供参考:查看String源代码可以得知类String中是使用域 count 来记录对象字 ...

哥们,我决定了,你是我偶像
回复 使用道具 举报
陈琦 发表于 2012-10-24 22:22
哥们,我决定了,你是我偶像

不敢不敢,共同进步才是王道!哈哈,
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马