`

String 创建

阅读更多
package com;
import org.junit.Test;
public class TestString
{

public void test1()
{
   String s = new String("abc");
   String s1 = "abc";
   String s2 = new String("abc");
 
   System.out.println(s == s1);
   System.out.println(s == s2);
   System.out.println(s1 == s2);
System.out.println(s == s.intern());
   System.out.println(s1 == s.intern());
   System.out.println(s1.intern() == s2.intern()); 上述代码中:
String s = new String("abc"); 请问在内存中创建了几个对象?分别在什么地方?
创建了两个对象,分别在String Pool(常量池)和Heap(堆)里.
首先生成了一个对象,叫"abc",在String Pool里面,先在常量池里查找是否有
"abc",发现没有就把"abc"放入String Pool里面.
接下来,执行new String("abc")构造方法,new出来的对象都放在Heap里面.
在Heap里又创建了一个"abc"的对象.这时内存里就有两个对象了,一个在String Pool
里面,一个在Heap里面.

只有String类型 有String Pool(常量池),String类是不可变的类.在创建对象,先在常量池里查找是否有
"abc"的常量,如果没有则创建一个新的,如果有则不会再创建,使用原来已经存在的.
其中s只是一个对象的引用(存放对象的地址),而不是对象.
在执行完第二句String s1 = "abc";后内存里创建了几个对象?为什么?
在执行完String s1 = "abc";后内存里一个对象也没有创建.因为在它先在String Pool里面检查是否有
内容为"abc"的字符串对象存在,发现已经有一个了,就不会再创建.(因为在执行完第一句已经存在一个"abc"了).
在执行完第三句String s2 = new String("abc");后内存中创建了几个对象?为什么?
在执行完第三名,内存创建了一个对象.因为此句中的"abc"先在String Pool里面查找是否有
内容为"abc"的对象,发现已经在在就不会再创建新的了.然后new String("abc")会在堆里
创建一个新的"abc"对象,只要new出来的,不管内容是否相同,都会在Heap中创建一个对象.
所以此句执行后只在Heap中创建了一个对象.

s == s.intern() 其中s.intern()会首先在String Pool里查找是否有内容为"abc"的对象,
发现存在,就会返回String Pool里面内容为"abc"的对象,地址也指向它.所以此句输出false.
s1 == s.intern() 同样,s1指向的是String Pool里面内容为"abc"的对象,所心此句输出true.
s1.intern() == s2.intern() 同样,s1.intern()和s2.intern()指向的都String Pool里面内容
为"abc"的对象,所以此句输出true.
***********************************************
s == "hel" + "lo"当加号两边都是常量值时,就会组成一个新的常量值在String Pool里面.
如果String Pool已经有相同内容的就不会再创建.输出true.
"hel" + s2 当加号两边有一个不是常量值,会在堆里面创建一个新的"hello"对象.输出false
s1 + s2 同上,输出false.





}

public void test2()
{
   String s = "hello";
   String s1 = "hel";
   String s2 = "lo";
 
   System.out.println(s == "hel" + "lo");
   System.out.println(s == "hel" + s2);
   System.out.println(s == s1 + s2);
}
}
分享到:
评论

相关推荐

    String创建对象

    要笔试或者要面试JAVA的可以看看!(更新中....)

    numpy使用fromstring创建矩阵的实例

    今天小编就为大家分享一篇numpy使用fromstring创建矩阵的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

    Java String创建对象实例解析

    主要介绍了Java String创建对象实例解析,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下

    String对象创建问题

    String对象的创建问题,分为:编译期和执行期 详细的讲解String对象创建问题

    C++实现string类

    用c++实现string类,包运算符重载+,+=,<,>,等,还有运算符输入输出流

    new String(\"abc\")创建几个对象的解释

    java面试的疑惑剪辑 博文链接:https://z-jq1015.iteye.com/blog/248599

    string 的创建

    为初学者解惑 string创建时 是创建在堆中 还是在栈中 是不是和原有对象是一个对象

    java面试题目.docx

    答:String创建对象有两种情况: 第一种:如果String常量池中已经创建了“xyz”,则不会继续创建,此时只创建了一个对象new String(“xyz”) 第二种:如果String常量池中没有创建“xyz”,则会创建两个对象,一个...

    String对象详解(附代码)

    对String创建几个对象代码详解,包括字符串相加,对象相加等等

    String类创建对象问题

    关于String类中常量池、字符串池的理解

    基于Keil实现字符串函数string.h的简单应用

    基于Keil实现字符串函数string.h的简单应用基于Keil实现字符串函数string.h的简单应用基于Keil实现字符串函数string.h的简单应用基于Keil实现字符串函数string.h的简单应用基于Keil实现字符串函数string.h的简单应用...

    共享struct2string由结构体变量获得其创建语句-struct2string.rar

    共享struct2string由结构体变量获得其创建语句-struct2string.rar 本帖最后由 黄小标 于 2012-9-27 21:19 编辑 struct2string 顾名思义就是将struct变量变成字符串,此处字符串是此变量的创建语句。 不才,...

    JAVA面试题String产生了几个对象

    主要介绍了JAVA面试题 String s = new String("xyz");产生了几个对象?,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    创建string对象过程的内存分配:

    创建string对象过程的内存分配&&包含多个例子,更加容易理解~~

    java四种创建对象的方式

    详细总结了java中创建对象的不同方式和String创建对象的不同方式

    c++中由类名(string)创建这个类对象(RTTI)

    c++中由类名(string)创建这个类对象(RTTI)

    Java程序设计基础:创建String字符串.pptx

    创建String字符串 目录 课程导入 掌握String字符串对象的创建 掌握字符串对象的输入与输出 一般程序需要处理大量文本数据Java语言的文本数据被保存为字符或字符串类型。 若干个字符在计算机里面如何存储? 如何引用...

    String.txt

    String a="abc";//创建字符串方式1 String b =new String("abc"); //创建字符串方式2 System.out.println(a==b); //false,内存地址不相等 String c =new String("abc"); String d =new String...

Global site tag (gtag.js) - Google Analytics