`
阅读更多

堆:存放所有new出来的对象。

常量池:存放字符串常量和基本类型常量(public static final)。

 

对于字符串:其对象的引用都是存储在栈中的,如果是编译期已经创建好(直接用双引号定义的)的就存储在常量池中,如果是运行期(new出来的)才能确定的就存储在堆中。

String s1 = "china"; //编译期创建,存储在常量池中
String s2 = "china";
String ss1 = new String("china");  //运行期new出来,存储在堆中
String ss2 = new String("china");  
if (s1 == s2)//true
{
	System.out.println("s1 == s2");
} else {
	System.out.println("s1 != s2");
}

if(ss1 == ss2) {//false
	System.out.println("ss1 == ss2");
} else {
	System.out.println("ss1 != ss2");
}


if (s1.equals(s2))//true
{
	System.out.println("s1.equals(s2)");
} else {
	System.out.println("s1 not equals s2");
}

if (ss1.equals(ss2))//true
{
	System.out.println("ss1.equals(ss2)");
} else {
	System.out.println("ss1 not equals ss2");
}


if (s1 == ss1)//false
{
	System.out.println("s1 == ss1");
} else {
	System.out.println("s1 != ss1");
}

if (s1.equals(ss1))//true
{
	System.out.println("s1.equals(ss1)");
} else {
	System.out.println("s1 not equals ss1");
}

结果:

s1 == s2
ss1 != ss2
s1.equals(s2)
ss1.equals(ss2)
s1 != ss1
s1.equals(ss1)

 

对于equals相等的字符串,在常量池中永远只有一份,在堆中有多份。

对于通过new产生一个字符串(假设为”china”)时,会先去常量池中查找是否已经有了”china”对象,如果没有则在常量池中创建一个此字符串对 象,然后在堆中再创建一个常量池中此”china”对象的拷贝对象。

有道面试题:String s = new String(“xyz”);产生几个对象?一个或两个,如果常量池中原来没有”xyz”,就是两个。 

分享到:
评论

相关推荐

    java 字符串 正则表达式 详细实例代码

    通过运行和调试这些代码,你可以加深对Java字符串、正则表达式以及日期时间格式化的理解。 总之,理解和熟练掌握Java中的字符串操作、正则表达式以及日期时间格式化对于任何Java开发者来说都是必不可少的技能。通过...

    JAVA 字符串 操作

    在Java编程语言中,字符串...以上只是Java字符串操作的一小部分,实际开发中还有许多其他方法和特性,如国际化(I18N)、正则表达式等,都需要程序员灵活掌握。理解并熟练运用这些操作,能有效提高代码质量和效率。

    Java检索字符串中是否存在某字符

    在Java编程语言中,字符串处理是一项基础且重要的任务。标题提到的"Java检索字符串中是否存在某字符",实际上涉及到字符串的查找...通过学习和理解这些算法,开发者能够更好地处理字符串相关的复杂问题,提高程序性能。

    JAVA日期与字符串的转换

    在Java编程中,经常需要将日期对象转化为字符串形式以便于存储或显示,或者反过来将字符串转化成日期对象来进行日期计算等操作。本文将详细介绍如何在Java中实现这两种转换。 #### 一、将一个Date类型的变量转换为...

    Java字符串分隔方法split实践

    在Java编程语言中,字符串是极其重要且常用的数据类型。字符串处理是许多程序的核心部分,而`split()`方法就是处理字符串的一个关键工具。这个方法允许我们根据特定的分隔符将一个字符串分割成多个子字符串,这对于...

    JAVA 字符串应用笔记

    字面量方式会创建一个常量字符串,存储在字符串池中;而构造器则会在堆上创建对象。 2. **字符串不可变性**: Java中的字符串是不可变的,意味着一旦创建,就不能更改其内容。每次对字符串进行修改操作(如`append...

    java字符串内存计算

    ### Java字符串内存计算 在Java开发中,理解内存管理至关重要,特别是对于字符串处理而言。本文将深入探讨如何在Java中计算字符串所占用的内存空间,包括现有的计算方法、其局限性以及具体的计算公式。 #### 计算...

    java 字符串分割

    Java 字符串分割是 Java 编程语言中的一种常见操作,用于将给定的字符串按照一定的规则分割成多个子字符串,并将其存储在数组或集合中。在本例中,我们将学习如何使用 Java 实现字符串分割功能,包括将输入字符串...

    java 字符串转16进制Ascii

    在Java编程语言中,将字符串转换为16进制ASCII值是一个常见的操作,尤其是在处理数据编码、网络通信或存储时。这个过程涉及到字符到数字的转换,并且通常使用`Character`类和`Integer`类的方法来完成。让我们深入...

    java字符串处理输入一个字符串和一个字符后,原字符串中所有该字符将被删除并显示出结果

    在Java编程语言中,字符串处理是一项基础且重要的任务。在这个特定的场景中,我们需要创建一个Applet程序,它能够接收用户输入的字符串和一个字符,然后从原始字符串中删除所有出现的指定字符,并显示处理后的结果。...

    java 字符串中文判断

    在Java编程语言中,处理字符串是非常常见的操作,尤其是在涉及到文本分析和处理的场景。本文将深入探讨如何在Java中进行中文字符的判断和计数,这主要基于Java的Unicode编码特性以及字符集的理解。 首先,我们需要...

    java中的字符串处理

    2. **内部实现**:由于字符串不可变,因此Java使用了高效的内部存储结构(如字符数组)来存储字符串的内容,同时提供了多种构造方法以满足不同的使用场景。 #### 三、String类的构造方法 `String`类提供了多种构造...

    java 字符串的加密

    在Java编程语言中,字符串加密是一项重要的安全技术,它用于保护数据的隐私和安全性。字符串加密通常涉及到将明文字符串转换成密文,这样未经授权的用户就无法理解数据的原始含义。下面我们将深入探讨Java中字符串...

    java字符串编码转换

    ### Java字符串编码转换详解 #### 一、Java 字符串编码转换基础 在Java中,字符串的处理是非常常见的操作之一,而字符编码是确保数据正确显示的关键因素。本篇文章将重点介绍Java中字符串编码的转换方法及其在Web...

    java解析xml字符串

    ### Java解析XML字符串 在给定的代码示例中,我们看到了如何使用JDOM库来解析一个XML字符串,并对其进行操作。下面我们将详细解析这个过程: 1. **初始化XML源**:首先,将XML字符串转化为`StringReader`对象,这...

    java字符串操作大全

    ### Java字符串操作大全 本文将详细介绍Java中字符串的各种操作方法,包括基本的字符串处理功能以及更高级的操作技巧。这些知识点对于Java初学者来说至关重要,并且能够帮助开发者更好地理解和运用Java中的字符串类...

    java 字符串加密解密

    在IT行业中,字符串加密解密是信息安全领域的重要组成部分,它涉及到数据保护、用户隐私和网络安全。本项目提供了四种常见的加密解密算法的Java实现:BASE64、AES、DES和MD5。接下来,我们将深入探讨这四种算法及其...

    Java 字符串与文本相关实例源码

    在Java编程语言中,字符串(String)是至关重要的数据类型,用于处理文本信息。字符串是不可变的,这意味着一旦创建,就不能更改其...通过学习和实践这些示例,开发者可以更好地掌握Java字符串操作的技巧,提升编程能力。

    java 创建字符串类

    这是因为字符串被存储在常量池中,修改字符串会生成新的`String`对象。 - **构造方法**:可以通过传递字符数组或另一个`String`对象来创建`String`实例。例如,`new String("Hello")`或`new String("abc"....

Global site tag (gtag.js) - Google Analytics