.新人问一下子char和 string
.新人问一下char和 string
char的取值范围为0到65535,是特殊的int,是16位的,int把强转成char是不是直接截取后16位,我今天试了下,比如字符'一‘,对它加65536的倍数返回值还是本身,恰恰验证了我的想法,不知道是不是这样的?另外想问一下,string的长度是多少好像听别人说过,不是很理解哎
------解决思路----------------------
的确是有长度限制的,不过是一个非常大的值,普通使用可以不用考虑
------解决思路----------------------
这个只是 字符串字面量 定义时的长度。不是字符串类中所能表示的字符串的长度。
以下就是一个200M的大字符串:
------解决思路----------------------
不一定是截取后16位,这个和处理器的大小端有关系。
new 出来的String长度最长是2147483647,也就是Integer.MAX_VALUE.
如果是"abc",这种创建,最大长度是65534。这跟常量池里面设置的大小有关。
CONSTANT_Utf8_info {
u1 tag;
u2 length;
u1 bytes[length];
}
char的取值范围为0到65535,是特殊的int,是16位的,int把强转成char是不是直接截取后16位,我今天试了下,比如字符'一‘,对它加65536的倍数返回值还是本身,恰恰验证了我的想法,不知道是不是这样的?另外想问一下,string的长度是多少好像听别人说过,不是很理解哎
------解决思路----------------------
的确是有长度限制的,不过是一个非常大的值,普通使用可以不用考虑
------解决思路----------------------
如果使用 Sting str = "aaaa";的形式定义一个字,那么双引号里面的ASCII 字符最多只能有 65534 个。为什么呢?因为在class
文件的规范中, CONSTANT_Utf8_info 表中使用一个16 位的无符号整数来记录字的长度的,最多能表示 65536 个字节,而java class 文件是使用一种变体UTF-8来存放字符的,null 值使用两个字节来表示,因此只剩下 65536- 2 = 65534字节。也正是变体UTF-8 的原因,如果字符串中含有中文等非ASCII 字符,那么引号中字符的数量会更少(一个中文字符占用三个字节)。如果超出这个数量,在的时候编译器会报错。
这个只是 字符串字面量 定义时的长度。不是字符串类中所能表示的字符串的长度。
以下就是一个200M的大字符串:
char[] ch1=new char[200*1024*1024];
String s=new String(ch1);
System.out.println("200M的大字符串:"+s.length());
------解决思路----------------------
char的取值范围为0到65535,是特殊的int,是16位的,int把强转成char是不是直接截取后16位,我今天试了下,比如字符'一‘,对它加65536的倍数返回值还是本身,恰恰验证了我的想法,不知道是不是这样的?另外想问一下,string的长度是多少好像听别人说过,不是很理解哎
不一定是截取后16位,这个和处理器的大小端有关系。
new 出来的String长度最长是2147483647,也就是Integer.MAX_VALUE.
如果是"abc",这种创建,最大长度是65534。这跟常量池里面设置的大小有关。
CONSTANT_Utf8_info {
u1 tag;
u2 length;
u1 bytes[length];
}