`
神罗天征
  • 浏览: 19642 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java 字符串对象的处理(String s = new String("abc")生成多少对象的问题探讨)

阅读更多

public class StringTest {

public static void main(String[] args) {

String s1 = "a";//生成一个对象或者不生成对象(在字符串常量池中如果有a就不生成,如果没有就生成一个)

 

/* 生成两个或者一个对象(在堆内存生成一个对象b,在字符串常量池再生成一个b(如果常量池中已经有b的话,就不生成,此时只生成一个对象),

* 因为JVM的处理是:

* 在运行过程中生成的所有字符串都要在字符串常量池中有:

* 如果常量池中有了就不生成,如果没有就生成一个)

*/

String s2 = new String("b");

 

String s3 = s1+"b";

String s5 = "ab";

String s4 = "a"+"b";

 

/* 结果为false

* JVM的处理方式是:运行时候生成的对象都保存在堆内存

* s1是一个对象的引用,必须在运行的时候才能处理,所以s3指向的对象是在运行的时候生成的。

* 因为String在jdk中的定义是final的,所以s5这种直接定义字符串的方式其实相当于常量。常量初始化就就有固定值的,且编译以后直接存在字节码中。

* 常量字符串的处理方式是:JVM加载的时候,直接从字节码中获取字符串,然后放入字符串常量池中。

* 所以:s3指向的是堆内存中的对象,而s5指向的是字符串常量池中的对象,必然不是同一个对象,结果为false

*/

System.out.println(s3==s5);

 

 

/* 结果为true

* 因为字符串相当于常量,所以s4在经过编译以后(经过编译器优化),在字节码中也是直接存储为ab的,当jvm加载的时候处理方式和s5就是一样的。

* 所以他们都指向字符创常量池中的ab,结果为true

*/

System.out.println(s4==s5);

 

 

}

}

分享到:
评论

相关推荐

    Java String 字符串创建理解 equels和\"==\" 差异

    使用new关键字创建的字符串会在堆内存中创建一个新的对象,即使常量池中已有相同的字符串,也会生成新的实例。 3. **StringBuilder/StringBuffer**:`StringBuilder sb = new StringBuilder().append("Hello")....

    java中的字符串处理

    在Java中,字符串是一系列字符的集合,与其他编程语言将字符串视为字符数组不同,Java采用了更为先进的方式——将字符串视为`String`类型对象来处理。这种设计使得Java能够提供丰富的字符串处理功能,包括但不限于...

    JAVA字符串处理函数列表一览

    ### JAVA字符串处理函数列表一览 在Java编程语言中,字符串处理是极其常见且重要的操作之一。字符串类`String`提供了丰富的内置方法来帮助开发者高效地完成各种字符串操作任务。本文将详细解读`String`类中的一些...

    java String 使用详解

    本文将详细介绍 Java String 的使用方法,包括 String 对象的初始化、字符串的常见操作等。 一、String 对象的初始化 String 对象的初始化是一种特殊的语法,Java 提供了简化的初始化方法,例如: String s = ...

    java常用字符串函数集锦

    Java 中字符串是连串的字符,但是与许多其他的计算机语言将字符串作为字符数组处理不同,Java 将字符串作为 String 类型对象来处理。将字符串作为内置的对象处理允许 Java 提供十分丰富的功能特性以方便处理字符串。...

    String.txt

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

    java中常用的字符串的截取方法

    Java 中常用的字符串截取方法 在 Java 编程语言中,字符串截取是非常重要的操作之一。字符串截取可以用于获取字符串中的部分内容,或者将字符串分割成多个部分。本文将详细介绍 Java 中常用的字符串截取方法,包括 ...

    String字符串比较1

    而`"hel" + lo`在运行时进行连接,生成一个新的字符串对象在堆中,因此`hello`和`"hel" + lo`是不同的对象,比较结果为`false`。 总的来说,理解和掌握这些基础知识对于编写高效、优化的Java代码至关重要。了解字符...

    有关Java中字符串的几个问题的讨论

    本讨论将深入探讨Java中字符串相关的几个关键问题,包括字符串的创建、常量池、字符串比较以及不可变性。 1. **字符串创建**: 在Java中,有多种创建字符串对象的方式。最常见的两种是通过`new`关键字和使用双引号...

    java字符串操作大全

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

    理解java中的字符串的内存分配

    这里,由于 `"abc"` 是一个字符串字面量,Java 会直接在字符串常量池中查找或创建 `"abc"` 对象 `B`。然后,`s2` 引用将直接指向字符串常量池中的 `B`。 接下来: ```java String s3 = "abc"; ``` 当再次创建 `...

    深入探讨Java中的String类.pdf

    当创建一个新的 String 对象时,Java 会首先在 String.Pool 中查找是否已经存在该字符串,如果存在则返回该字符串的引用,否则创建一个新的字符串对象。 五、String 对象的应用 String 对象是 Java 中最基本的数据...

    JAVA精华 String类一旦初始化就不可以改变,而stringbuffer则可以。它用于封装内容可变的字符串。

    【JAVA精华】在Java编程语言中,String类和StringBuffer类是处理字符串的重要工具,但它们之间存在显著的差异。 1. **String类**:一旦String对象被创建,它的内容就不能更改。这是因为String对象在Java中是不可变...

    java 分解字符串

    在Java编程语言中,分解字符串是一项常见的任务,它涉及到对字符串进行分析,将字符串分割成多个子字符串。这个过程通常被称为字符串分割。在Java中,我们主要使用`String`类提供的`split()`方法来实现这一功能。...

    java 创建字符串类

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

    String中==与equals区别验证

    在Java编程语言中,`==` 运算符与 `equals()` 方法被广泛用于比较对象,尤其是当处理字符串(`String` 类)时。这两者之间的区别是理解Java内存管理和对象引用的关键。以下是对给定代码片段中所展示概念的详细解析。...

    Java String对象的经典问题

    ### Java String对象的经典问题 #### 一、String 类与对象机制概述 在Java中,`String`类是一个非常重要的类,它提供了丰富的功能用于处理文本数据。`String`类是不可变的(immutable),这意味着一旦一个`String`...

    **Java字符串的方法

    在Java编程语言中,字符串(`String`)是一个极其重要的类,它代表了一系列的字符。在日常开发中,我们经常会遇到对字符串进行操作的需求,例如获取字符串长度、查找某个字符的位置等。本文将详细介绍《Java字符串的...

    深入了解java 中的String

    可以直接使用双引号定义字符串,这种方式下,字符串 `"abc"` 将会创建一个新的字符串对象。例如: ```java String x = "abc"; ``` 这种方式下的字符串会被放入字符串常量池中,以提高效率并减少内存消耗。 #### ...

    java中常用的字符串的截取方法.docx

    Java 中常用的字符串截取方法 Java 中的字符串截取方法是指对字符串进行截取、提取、比较、修改等操作的方法...这些方法都是 Java 中字符串截取和操作的基础,熟练掌握这些方法可以帮助我们更好地操作和处理字符串。

Global site tag (gtag.js) - Google Analytics