`

JAVA面试题解惑系列(二)——到底创建了几个String对象?

阅读更多
removed.

请到博文下载PDF文件:http://zangweiren.iteye.com/blog/241218
82
7
分享到:
评论
40 楼 rabbitbug 2008-07-04  
难怪在itpub上很少看到你了
原来跑到这了
39 楼 youfengkai 2008-07-04  
哦,谢谢了。
38 楼 youfengkai 2008-07-04  
哦,谢谢了。
37 楼 臧圩人 2008-07-03  
回复youfengkai:
把你的理解反过来就对了。请注意这句话:
为了便于说明,我们把指向字符串池中已经存在的对象也视为该对象被加入了字符串池:
36 楼 youfengkai 2008-07-03  
String c = "abcd";// 创建了一个对象,并加入字符串池中  
 
        String d = "ab" + "cd";  
        // 如果d和c指向了同一个对象,则说明d也被加入了字符串池  
        if (d == c) {  
            System.out.println("\"ab\"+\"cd\" 创建的对象 \"加入了\" 字符串池中");  
        }  
        // 如果d和c没有指向了同一个对象,则说明d没有被加入字符串池  
        else {  
            System.out.println("\"ab\"+\"cd\" 创建的对象 \"没加入\" 字符串池中");  
        }  

怎么感觉不太对呢
是不是应该这样的?如果 d == c, 说明 "ab" + "cd" 创建的对象没加入字符串池中。 否则, d和c没有指向同一个对象,才说明d加入了字符串池
35 楼 麦田守望者 2008-07-03  
这个还与具体的条件相关,如果在String池中没有“abc”对象存在那么就会创建两个对象,如果池中已经存在“abc”对象的话,那么就只是创建一个对象,所以这个问题要看具体的条件才能下结论
34 楼 cbywxy 2008-07-03  
 
33 楼 lggege 2008-07-03  
5.
new() 出来的都是在Heap中
32 楼 lggege 2008-07-03  
1.
JVM 中, 线程持有Stack, Stack随线程创建而创建.
Heap 则是JVM启动时就启动, 共享, 由垃圾回收机制清理.

2.
Stack 和 Heap都是在Ram中划分.

3.
基本型 int, char...等在创建前会查看Stack中是否已经有, 有则则向, 没有则新建.

4.
String 可以想象为与char[]等同, String a= "abc", 首先在Heap中创一个对象, 再到Stack中找char[]是否存在, 有则 指向该地址, 无则在Stack中创建.

5.
String a = new("abc"); new()出来的都会有自己的独立存放, 不会像前面一样的指向, 而是指向新创建的.

6.
== 基本型比值, 对象比引用.
31 楼 臧圩人 2008-07-02  
回复moon_vv:
都不是,我只是把自己学习到的知识整理出来,跟大家分享一下,呵呵
30 楼 ceci.lia 2008-07-02  
引用
引用
String a = "ab";
String b = "cd";
"ab"+"cd" 创建的对象 "加入了" 字符串池中
a +"cd" 创建的对象 "没加入" 字符串池中
"ab"+ b 创建的对象 "没加入" 字符串池中
a + b 创建的对象 "没加入" 字符串池中


从输出的结果可以看到只有 "ab"+"cd"创建的对象加入了字符串池中,其它的的都没有加入字符串池中,请问一下楼主那e,f,g引用到底指向哪了呢?

e,f,g根据文章的末尾来看,应该指向了堆中某块内存区域
29 楼 moon_vv 2008-07-02  
你是管面试的,还是刚刚考了scjp吧
28 楼 moon_vv 2008-07-02  
以前scjp考试的时候有类似的问题,好久不看这个了,都忘了,哈哈
27 楼 yuwenchun 2008-07-02  
谢谢分享!!!
26 楼 臧圩人 2008-07-01  
回复crazy.j:
让你们这些高手见笑了,呵呵
25 楼 开山怪 2008-07-01  
多谢指点,以后还是得好好学习。
24 楼 臧圩人 2008-07-01  
回复 开山怪:
阅读代码是一种很好的学习方式和学习习惯,尤其是研读一些优秀的代码可以让我们从作者那里收获很多知识。
对于是否阅读JDK的src,我建议你可以根据实际需要来决定,如果在编程过程中对于某个类的使用有疑问,不妨读读它的源码,往往在反复阅读代码的过程中,使你对这个类有了越来越深入的认识。
23 楼 开山怪 2008-07-01  
学习Java需不需要看JDK的src啊?老鸟指点下小小菜鸟呗。
22 楼 weidewei 2008-07-01  
不错,深入了不少啊!
21 楼 crazy.j 2008-07-01  
行啊 1年不见 都当上大哥了~

相关推荐

    JAVA面试题解惑系列(二)——到底创建了几个String对象-JAVA程序员JAVA工程师面试必看.pdf,这是一份不错的文件

    JAVA 面试题解惑系列之 String 对象创建机制 本文将深入探讨 JAVA 中 String 对象的创建机制,解答常见的面试题目,并探索 String 对象池的概念和机制。 一、String 对象的创建方式 在 JAVA 中,String 对象可以...

    JAVA面试题解惑系列合集

    .3 1.2 JAVA面试题解惑系列(二)——到底创建了几个String对象? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .8 1.3 JAVA面试题解惑系列(三)——变量(属性)的覆盖 . . . . . . . . . . . . ....

    臧圩人--JAVA面试题解惑系列合集.pdf

    **1.2 JAVA面试题解惑系列(二)——到底创建了几个String对象?** - **知识点**:探讨Java中String对象的创建机制,特别是常量池的概念和String对象的内存分配策略。了解字符串字面量与`new String()`的区别,以及...

    JAVA面试题解惑系列.rar

    这个压缩包可能包含了两本书籍,一本是"JAVA面试题解惑系列.pdf",另一本是"臧圩人--JAVA面试题解惑系列合集.pdf"。这些资源旨在帮助求职者准备Java开发相关的面试,提升他们对Java技术的理解和应用能力。 在Java...

    Java面试题解惑系列

    2、到底创建了几个String对象;3、变量(属性)的覆盖;4、final,finally,finalize;5.传了值还是传了引用;6.String杂谈;7.日期与时间的处理;8.基本类型总结;9.继承,多态,重载,重写;10.多线程;11.运算符...

    Java面试题详解,和一些基础知识的深入剖析,个人认为非常棒

    首先,我们来看“JAVA面试题解惑系列(二)——到底创建了几个String对象?”这个问题。在Java中,String是不可变的,这意味着一旦创建,其内容就不能改变。因此,每当对String进行操作,如拼接或赋值,实际上可能...

    《经典JAVA面试题解惑系列合集(臧圩人)》

    《经典JAVA面试题解惑系列合集(臧圩人)》这本书很可能就是针对这些问题进行深入解析的一本指南。 首先,Java的基础知识是面试中的必考部分。这包括但不限于Java语法、数据类型、控制结构(如if语句、for循环、...

    JAVA面试题解惑系列

    【JAVA面试题解惑系列】是一系列专门针对Java开发者面试准备的文章集合,涵盖了多个核心Java概念和面试常问问题。作者臧圩人在JavaEye社区分享了这个系列,旨在帮助求职者理解和解答面试中可能出现的疑问。 1. **类...

    JAVA面试题解惑系列——类的初始化顺序

    在Java中,类的初始化顺序是一个经常被问及的面试题目,尤其对于Java程序员和工程师来说,了解这个知识点是必须的。在Java中,类的初始化顺序是面试中的经典问题之一,它涉及到继承、静态成员以及实例成员等多个方面...

    JAVA面试题解惑系列(六)——字符串(String)杂谈[收集].pdf

    Java中的字符串(String)是编程面试中的热门话题,其特性与操作是面试官常常用来考察候选人基础知识的手段。本文将深入探讨String对象的一些关键知识点。 首先,我们要了解`String`类的`length()`方法。这个方法返回...

    JAVA面试题解惑系列(一)——类的初始化顺序-JAVA程序员JAVA工程师面试必看.pdf,这是一份不错的文件

    JAVA面试题解惑系列(一)——类的初始化顺序 JAVA 是一门面向对象的编程语言,类的初始化顺序是 JAVA 程序员和 JAVA 工程师面试中一个非常重要的知识点。本文将详细讲解类的初始化顺序,并提供了相关的测试代码,...

    JAVA面试题解惑系列.doc

    《JAVA面试题解惑系列——类的初始化顺序》 在Java编程中,理解类的初始化顺序是面试中常见的考察点,因为它直接关系到程序的执行逻辑。本文将深入探讨类的初始化过程,以及在继承场景下如何理解这个过程。 首先,...

    115个Java面试题和答案——终极列表

    Java面试题是每个Java开发者在求职过程中必须面对的挑战,涵盖范围广泛,从基础概念到高级特性和设计模式。这份终极列表包含115个Java面试题和答案,旨在帮助求职者全面准备,以期在面试中表现出色。以下是部分核心...

    JAVA面试题解惑系列合集.docx

    本文通过对Java面试题中的两个典型问题——类的初始化顺序和String对象的创建——进行了深入分析。这些知识点不仅是Java编程的基础,也是深入理解Java语言特性的关键。掌握这些内容不仅能够帮助开发者在面试中表现...

Global site tag (gtag.js) - Google Analytics