`
yqin
  • 浏览: 58877 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

String s = new String("xyz") 创建了几个String Object?

    博客分类:
  • java
 
阅读更多

String s = new String("xyz")  创建了几个String Object?

 

         两个!

 

        "xyz "作为一个常量字符串首先被创建,它被保存在“串池”中。所谓串池,简单讲就是从程序运行开始,你创建的所有常量字符串被统一保存的地方。在串池中已经存在 "xyz "这个串的情况下,如果你需要一个内容相同的串,你不需要再次创建一个,而是直接用这个就可以,这样当然是为了节省空间。注意,一个字符串是无法被修改的,所以在程序的不同地方用不同变量引用同一个常量串没有任何危险,因为你只能读取它而不能修改它。
        当然,使用new   String也创建了一个对象, "xyz "作为传入构造方法的实际参数,其含义就是:我要创建一个串,它的内容和串池中的 "xyz "内容一致!

 

        首先你要理解constant   pool,   这是一个特殊的共享区域,literate,   Class这些可以在内存中共享的不经常改变的东西,都可以放在这里。 如果你用了String   s   =   new   String( "xyz "); 那么,会有两个String被创建,一个是你的Class被CLassLoader加载时,你的 "xyz "被作为常量读入,在constant   pool里创建了一个共享的 "xyz " 然后,当调用到new   String( "xyz ")的时候,会在heap里创建这个new   String( "xyz "); 

        但是如果你把String   s   =   new   String( "xyz ").intern(); 那么具体过程变成,现在heap里创建一个String,   然后调用intern()方法,发现constant   pool里存在 'xyz ',然后就会返回constant   pool内对象的引用,稍后heap里的就not   reachable了,会被gc,最终VM里只有一个 "xyz

 

        所以一个在heap中,一个在String常量池。

分享到:
评论

相关推荐

    Java问题宝典2012版

    创建了几个String Object? 二者之间有什么区别? 25 34、String 和StringBuffer的区别 25 35、如何把一段逗号分割的字符串转换成一个数组? 26 36、数组有没有length()这个方法? String有没有length()这个方法? 26 ...

    java面试题

    第一,谈谈final, finally, finalize的区别。 第二,Anonymous Inner Class (匿名内部类) 是否可以extends...创建了几个String Object? 第十,Math.round(11.5)等於多少? Math.round(-11.5)等於多少?

    java_ms.rar_Math Class_java collection

     第九,String s = new String("xyz") 创建了几个String Object?   第十,Math.round(11.5)等於多少? Math.round(-11.5)等於多少?   第十一,short s1 = 1 s1 = s1 + 1 有什么错? short s1 = 1 s1 += 1 有什么...

    java各大软件公司的面试题的集和

    创建了几个String Object? 第十,Math.round(11.5)等於多少? Math.round(-11.5)等於多少? 第十一,short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错? 面试题都是很变态的,要做好...

    java 面试常问的问题 如何回答

    创建了几个String Object? 二者之间有什么区别? 23 34、String 和StringBuffer的区别 23 35、如何把一段逗号分割的字符串转换成一个数组? 24 36、数组有没有length()这个方法? String有没有length()这个方法? 24 ...

    java中的String类常用方法解析(一)

    - `String()`:创建一个空字符串。 - `String(char[] value)`:根据字符数组创建字符串。 - `String(String original)`:复制一个已存在的字符串。 2. **字符串拼接** - `concat(String str)`:将指定字符串...

    java笔试题目以及部分答案

    创建了几个 String Object? String s = new String("xyz"); 创建了两个 String Object,一个是字符串常量池中的对象,另一个是堆中的对象。 10. Math.round(11.5) 等於多少? Math.round(-11.5) 等於多少? ...

    Java面试宝典2017.zip

    一. Java基础部分 7 1、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 7 2、Java有没有goto?...创建了几个String Object? 二者之间有什么区别? 23 34、String 和StringBuffer的区别

    C#面试笔试题目总结

    创建了几个 String Object? 两个对象。一个是 xyz,一个是指向 xyz 引用的 s。 22. GC 是什么?为什么要有 GC? GC 是垃圾回收器。因为有了 GC 就省去了程序员手工编码释放内存。 23. 能用 foreach 遍历访问的...

    2022年Java面试题100题.pdf

    - `String s = "xyz"` 与 `String s = new String("xyz")` 的区别在于,前者如果常量池中已有"xyz",则直接引用,否则在池中创建;后者除了在池中创建,还会在堆中额外创建一个对象。 2. **接口与抽象类**: - ...

    2022年JAVA面试题及答案.doc

    JAVA 面试题及答案.doc 该资源提供了一份 JAVA 面试题集,涵盖了 JAVA 语言的多个...* 该语句创建了两个 String 对象:一个是 String 常量池中的“xyz”,另一个是new String("xyz") 创建的对象。 ...(以下省略)

    变态级JAVA程序员面试32问

    创建了几个String Object?  第十,Math.round(11.5)等於多少? Math.round(-11.5)等於多少?  第十一,short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?  第十二,sleep() ...

    json格式与java类对象相互转换

    Map<String, Object> map = mapper.readValue(jsonObject, new TypeReference<Map<String, Object>>() {}); ``` 二、Java类对象到JSON转换 1. 将Java对象转换为JSON字符串,同样使用`ObjectMapper`: ```java ...

    神州租车面试题

    创建了几个String Object? 分析:这道题考察了String对象的创建机制。在Java中,String对象可以通过new关键字创建,也可以通过字面值的方式创建。当我们使用new关键字创建String对象时,JVM会在堆中创建一个新的...

    java面试宝典2012版.pdf

    创建了几个String Object? 二者之间有什么区别? 34、String 和StringBuffer的区别 35、如何把一段逗号分割的字符串转换成一个数组? 36、数组有没有length()这个方法? String有没有length()这个方法? 37、下面这...

    c#拼图游戏

    g.DrawImage(bm, new Rectangle(0, 0, Picsize, Picsize), (Rectangle)arrrect[inta[i]], GraphicsUnit.Pixel); pb[i].Image = bmp; pb[i].Click += new EventHandler(Picture_Click); if (a[i] == gzs * gzs - ...

    中软国际Java程序员笔试题及答案.doc

    创建了几个 String Object? * 两个对象,一个是“xyz”,一个是指向“xyz”的引用对象 s。 12. Math.round(11.5) 等於多少?Math.round(-11.5) 等於多少? * Math.round(11.5) 返回 12,Math.round(-11.5) 返回...

    java面试经典150道题目

    创建了几个 String Object "xyz"本身作为字符常量,在汇编语言中应该作为常量放在数据段,Java 有一个类似数据段的 constant pool 保存这个常量,在classloader 加载这个类的时候就把"xyz"和这个类的其他一些信息...

    java面试宝典

    通过`new String("xyz")`方式创建的字符串,会在堆内存中创建一个对象,并且字符串常量池中也会添加一个对应的字符串对象。 **34. String 和 StringBuffer的区别** - `String`是不可变的,而`StringBuffer`是可变...

    JAVA面试题 对JAVA面试有帮助!

    创建了几个String Object?  第十,(11.5)等於多少? (-11.5)等於多少?  第十一,short s1 = 1; s1 = s1 1;有什么错? short s1 = 1; s1 = 1;有什么错?  面试题都是很变态的,要做好受虐的准备。  第十二,...

Global site tag (gtag.js) - Google Analytics