String str="学Java"占多少内存空间 有的说6 有的说7 有的说10 str.getBytes().length这个和内存与关系吗 20
这个不是要考倒大家,不是应试教育,看看吧这么多答案,这是个经典面试题,大家有标准答案吗有标准答案的还能加分准确的说这个有四个选项都有自己的观点A6一个汉字占两个字节字母、...
这个不是要考倒大家,不是应试教育,看看吧 这么多答案,这是个经典面试题,大家有标准答案吗有标准答案的还能加分
准确的说这个有四个选项都有自己的观点
A 6 一个汉字占两个字节 字母、数字各占一个字节所以6
B 7 str.getBytes().length打印出来是7
C 10 java用的字符都是unicode编码的,应该无论中英文都是两个字节
D 11 学Java中间有空格所以10+1
你选哪个呢 展开
准确的说这个有四个选项都有自己的观点
A 6 一个汉字占两个字节 字母、数字各占一个字节所以6
B 7 str.getBytes().length打印出来是7
C 10 java用的字符都是unicode编码的,应该无论中英文都是两个字节
D 11 学Java中间有空格所以10+1
你选哪个呢 展开
5个回答
展开全部
首先Java里面的字符是使用UTF-8编码的,也就是说一个字符占用两个字节。“学Java”这个字符串一共占用10个字节。
修正:java的class文件是以UTF-8编码来保存的,Java内部是以UTF-16BE来处理字符的。总之是UNICODE。
UTF-8是1-4个字节。UTF-16BE是恒定2个字节。
至于为何getBytes().length为7,你可以跟踪(debug)一下,你会发现进行了encode处理。转成了真正的UTF-8。
public static void main(String args[]) throws UnsupportedEncodingException{
String str = "学Java";
byte [] utf16be = str.getBytes("utf-16be");
System.out.println(utf16be.length);
byte [] utf8 = str.getBytes("utf-8");
System.out.println(utf8.length);
byte [] utf = str.getBytes();
System.out.println(utf.length);
}
结果是:10,7,7
具体可以看下面代码:
可以看到下面代码使用了单例来获取默认编码。
在大多数情况下都会返回utf-8,除非你自己手动配置了file.encoding参数。
public static Charset defaultCharset() {
if (defaultCharset == null) {
synchronized (Charset.class) {
String csn = AccessController.doPrivileged(
new GetPropertyAction("file.encoding"));
Charset cs = lookup(csn);
if (cs != null)
defaultCharset = cs;
else
defaultCharset = forName("UTF-8");
}
}
return defaultCharset;
}
(这里特别说明一下:在C和C++中,汉字是两个字节,英文字符是一个字节,但是在java中,所有字符都是两个字节)
至于 String str = “学Java”;这个一共占用了多少内存,这是一个很值得深究的问题。
或者我们转换一下思路,你认为 String str = “学Java” 一共创建了多少个对象??
首先 “学Java” 就是一个对象,然后又创建了一个 str 对象。所以至少创建了2个对象。
至于一个对象使用多少内存空间,这更是涉及到JVM了。
Java不通于C和C++,在大多数时候不需要太过于深究太底层的问题。
展开全部
都在胡扯。Java中字符串不是基本类型,是对象类型。一个实例你怎么能知道它的内存大小呢?Java没有C语言中的sizeof运算符的!单说数据大小,是10字节,Java存储字符使用的是Unicode16,每字符2字节,无论汉字还是字母。说中间有空格的你眼睛太亮了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个应该是10个字节。“学Java”这个字符串占用6个字节没错,但是str是一个指向“字符串”的指针,指针在32位机器里面占用四个字节,因此一共10字节
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2014-03-26 · 知道合伙人数码行家
关注
展开全部
<p>您好,提问者:</p><p> 是6个字节。</p><p> 一个汉字占两个字节。</p><p> 字母、数字各占一个字节。</p><pre t="code" l="java">//Java默认的编码是UTF-8,确切来讲GBK、UTF-8所占的字节是相同<br /> String str="学Java";<br /> byte[] arr = str.getBytes("ISO-8859-1");<br /> System.out.println(arr.length); //如果是ISO-8859-1的话,就是5</pre>
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
str.getBytes().length
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询