本文是对http://www.iteye.com/topic/522167的阅读笔记
String的几种使用例子:
//1
String s1=new String("abc");
//2
String s2="abc";
//3
String temp1="a";
String temp2="b";
String s3=temp1+temp2;
//4
String s4="ab"+"cd";
情况1:
是使用常量构造String对象,s1是对实例的一个引用(一个地址),这个abc并不是一个对象,它是一个拘留字符串(说法来自http://www.iteye.com/topic/522167),文章的说法是:源代码中所有相同字面值的字符串常量只可能建立唯一一个拘留字符串对象.
这里创建了一个String内容是abc的实例,实例的内容来自一个不会改变且重用的拘留字符串对象,下次如果重新创建String对象内容还是abc的话,那么还是使用这个拘留字符串对象.
例子:
String sa=new String("Hello world");
String sb=new String("Hello world");
System.out.println(sa==sb); // false
sa,sb是对不同String实例的引用,尽管构造他们使用的字符都是同一个拘留字符串对象(abc).
情况2:
s2是对一个拘留字符串对象的引用,这里没有构造对象,而是直接引用了一个拘留字符串对象(abc)
情况3:
temp1,temp2都是拘留字符串对象(abc)的引用,在拼接的时候,先建立一个用temp1指向的拘留字符串对象(a)来构造一个StringBuilder实例,再用StringBuilder的append方法,将temp2指向的拘留字符串对象(b)加到这个StringBuilder实例的末尾,最后用toString方法返回的字符串构造一个String实例,并将它的引用赋给s3,这里使用了5个字符串对象:3个拘留字符串对象,1个String,1个StringBuilder
例子:
String sa = "ab";
String sb = "cd";
String sab=sa+sb;
String s="abcd";
System.out.println(sab==s); // false
sab是指向String对象(内容是abcd)的引用,s是指向拘留字符串对象(abcd)的引用,返回false
情况4:
使用拘留字符串对象的拼接,结果是:如果引用的内容是相同字面量的拘留字符串对象,那么引用的是同一个
例子:
String sc="ab"+"cd";
String sd="abcd";
System.out.println(sc==sd); //true
拼接好以后都引用一个地址,自然为true.
String sc="Hello world";
String sd="Hello world";
System.out.println(sc==sd); // true
都变量名不一样掩盖不了他们引用同一个拘留字符串对象的本质,为true.
如理解有错,感谢指出
分享到:
相关推荐
理解C# String类型:特殊的引用类型
字符串文字"abc"是一个String对象; 文字池[pool of literal strings]和堆[heap]中的字符串对象。 一、引用变量与对象:除了一些早期的Java书籍和现在的垃圾书籍,人们都可以从中比较清楚地学习到两者的区别。A aa...
不才,表达能力不是很好,可能看官不能理解上面的意思,还是看例子吧。 先创建个struct变量s clear s, s.country = 'China'; s.city = 'Chongqing'; s.address = struct; 然后运行 structstring = ...
Java常用类与基础API--String的理解与不可变性
深入了解java 中的String 1、String类是final的,不可被继承。public final class String。 2、String类是的本质是字符数组char[], 并且其值不可改变。private final char value[]; 然后打开String类的API文档,...
String,StringBuffer,StringBuilder区别。几乎所有的应用开发都离不开操作字符串,理解字符串的设计和实现以及相关 工具如拼接类的使用,对写出高质量代码是非常有帮助的
全面理解java中的String.doc
String:字符串常量 StringBuffer:字符创变量 StringBuilder:字符创变量 从上面的名字可以看到,String是“字符创常量”,也就是不可改变的...对于这句话的理解你可能会产生这样一个疑问 ,比如这段代码:
而String类型却有点特别,虽然它属于引用类型,但是他的一些特性却有点类似值类型。 关于C# String 1、不变性 我们先来看看一个例子: static void Main(string[] args) { string str1 = "string"; ...
关于string类的自定义,如果你对string不了解,可帮助你理解其功能有助于c++的学习
深入理解JavaString#intern()内存模型Java开发Java经验技巧共4页.pdf.zip
关于String类中常量池、字符串池的理解
【Java面试题】对String常量池的理解
创建string对象过程的内存分配&&包含多个例子,更加容易理解~~
主要介绍了java String的深入理解的相关资料,希望通过本文大家能理解String的用法,需要的朋友可以参考下
深入理解 Java String#intern() 内存模型.docx
String类使用,可以快速理解Java中String类的使用,容易上手。
主要介绍了浅谈Java编程中string的理解与运用,还是比较不错的,这里分享给大家,供需要的朋友参考。
深化理解JavaScript中为什么string可以拥有方法_.docx
Handbooks fo Exact String-Matching Algorithms 彻底理解字符串查找算法的好书