本文是对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 类型:特殊的引用类型 C# String 类型是一个特殊的引用类型,它的实例是只读的。这意味着 String 类型的...最后,需要注意的是,在编程中,我们需要正确地理解 String 类型的特性,以免引发不必要的错误。
【对String的深入理解】 String类在Java编程中扮演着至关重要的角色,它不仅涉及到基本的字符串操作,还涉及到内存管理、性能优化等多个方面。在深入理解String时,我们需要掌握以下几个关键知识点: 1. 引用变量...
在Java编程中,经常需要处理JSON格式的数据,它是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器...理解并掌握这些转换方法对于处理JSON数据至关重要,特别是在Java编程中进行Web服务开发或者API交互时。
总的来说,HexString和Base64String的转换是编程中常见的任务,理解它们的工作原理和转换过程对于任何IT从业者来说都是必备技能。掌握这个小程序的使用,不仅可以帮助处理日常开发中的数据编码问题,还能加深对数据...
总的来说,理解`String`对象在编译期和执行期的创建方式对优化Java程序的性能至关重要。编译期的字面量共享可以减少内存占用,而执行期的`new`操作则会导致额外的内存开销。合理选择创建方式,结合使用`...
### List转换成String数组 在Java编程中,我们经常需要对集合进行操作,尤其是在处理大量字符串数据时。本文将详细介绍如何将一个`List<String>`类型的集合转换为`String[]`数组,并通过不同的方法来实现这一过程。...
C#设计者为了提高代码的可读性,推荐在编写代码时使用`string`关键字,因为它更符合英语习惯,易于理解。但是,由于历史原因或者某些特定场景,`String`也会被使用。 `string`类型是不可变的,这意味着一旦创建了一...
本文将深入探讨C#中`String`与`string`之间的区别,帮助开发者更好地理解和使用这两种类型。 #### 1. 基本定义 首先,`string`是C#中的一个关键字,它实际上是`System.String`类型的别名。这意味着`string`并非C#...
### String[] 与 List 相互转化 在 Java 编程语言中,`String[]` 数组和 `List` 集合之间的相互转换是非常常见的需求。...这不仅能提高编程效率,还能帮助开发者更好地理解和运用 Java 集合框架的功能。
在C++编程中,数据类型之间的转换是常见的操作,特别是在处理用户输入或数据存储时。本文将详细讨论如何在...理解并熟练运用这些转换方法是C++编程的基本技能,特别是在处理用户输入、数据持久化或格式化输出等场景。
在实际编程中,理解和熟练运用这些`string`函数是非常必要的。例如,在处理用户输入或文件数据时,我们可能需要使用`strcpy`和`strcat`来组合字符串,使用`strcmp`来比较字符串,使用`strlen`来计算内存需求。同时,...
本文将详细探讨这一转换过程,并通过几个具体的示例来帮助理解。 #### 一、基础知识 在深入讨论如何将列表转换为字符串数组之前,我们首先需要了解一些基本概念。 - **List**:`List`是Java集合框架的一部分,...
首先,要理解STL string的构造函数。例如,当使用以下语句创建string对象时: ```cpp string str1(data); ``` 这里的`str1`会将`data`数组视作C风格字符串,即遇到第一个空字符('\0')时停止复制,因此`str1`只包含...
"String型的不可变性" Java 中的 String 型是一个特殊的包装类数据,它具有不可变性。什么是不可变性呢?...同时,理解 String 对象的创建过程和不可变性对于编写高效和可靠的 Java 程序非常重要。
根据提供的信息,我们可以总结出这份Java基础String类选择题练习题主要聚焦于String及StringBuffer类的使用。尽管具体的题目内容未给出,但从所展示的信息中可以推断出该练习题集涵盖了以下几方面的知识点: ### 一...
这个简单的`string`类介绍将带我们回顾基础,深入理解其内部机制和常用方法。 首先,`std::string`是C++标准库中的一个类模板,它表示可变长度的字符序列。在声明时,你可以通过构造函数初始化字符串,例如: ```...
标题和描述均强调了在Java中处理`String`对象时可能遇到的陷阱,尤其是在理解和使用`String`的处理机制上。文章由天津工业大学软件工程专业的翁龙辉撰写,旨在深入剖析`String`在Java中的独特行为及其潜在的陷阱。...
在Java编程语言中,`String`、`...理解`String`、`StringBuffer`和`StringBuilder`的区别和使用场合,可以帮助开发者写出更高效、更安全的代码。在实际开发中,应根据项目需求和环境选择合适的字符串处理类。
总之,将字符串数组转换为单一的string类型是一项常见的编程任务,理解并掌握不同语言中实现这一操作的方法是提升编程技能的重要一步。无论是C++的`stringstream`,Java的`StringBuilder`,还是C#的`string.Join`,...
`String.xml`文件是Android系统用来存储应用中所有文本资源的主要方式,它使得开发者能够方便地管理和国际化应用的文本内容。本工具就是专为处理`String.xml`与Excel表格之间的相互转换而设计的,方便开发者进行批量...