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
你选哪个呢
展开
 我来答
百度网友21647e5fc
2014-03-26 · TA获得超过709个赞
知道小有建树答主
回答量:149
采纳率:100%
帮助的人:144万
展开全部

首先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++,在大多数时候不需要太过于深究太底层的问题。

e世同人
2014-03-26 · TA获得超过830个赞
知道小有建树答主
回答量:229
采纳率:87%
帮助的人:90.1万
展开全部
都在胡扯。Java中字符串不是基本类型,是对象类型。一个实例你怎么能知道它的内存大小呢?Java没有C语言中的sizeof运算符的!单说数据大小,是10字节,Java存储字符使用的是Unicode16,每字符2字节,无论汉字还是字母。说中间有空格的你眼睛太亮了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
田真久
2014-03-27 · TA获得超过661个赞
知道小有建树答主
回答量:603
采纳率:100%
帮助的人:324万
展开全部
这个应该是10个字节。“学Java”这个字符串占用6个字节没错,但是str是一个指向“字符串”的指针,指针在32位机器里面占用四个字节,因此一共10字节
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
小童鞋_成er
2014-03-26 · 知道合伙人数码行家
小童鞋_成er
知道合伙人数码行家
采纳数:4650 获赞数:22879
主要从事J2EE工作,热爱Java,用心讨论技术,共同进步。

向TA提问 私信TA
展开全部
<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>
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
蓝风水晶灵
2014-03-26 · TA获得超过934个赞
知道小有建树答主
回答量:731
采纳率:0%
帮助的人:435万
展开全部
str.getBytes().length
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式