`
guyunduzai
  • 浏览: 17548 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论
阅读更多

public static void main(String args[]){ String s1 = new String("abc"); String s2 ="abc"; String s3 = new String("abc"); System.out.println(s1==s2); System.out.println(s1==s3); System.out.println(s2==s3); }

以上的代码输出什么呢,在此过程中又创建了多少个对象?

要明确以上的问题,要了解string创建对象的过程和原理才行。

       1、在创建s1对象的时候,首先会在string pool中查询是否具有要创建的对象,因为在执行这一句代码前并没执行任何语句,所以在string pool中并没有abc对象,那么java会在string pool中初始化一个abc对象,然后将此abc对象拷贝一份放入java堆内存中,s1指向堆内存中的abc,此过程中一共创建了两个对象

       2、在创建s2对象时,依然首先在string pool中查找,发现存在目标对象,将s2指向该对象,此过程并没有创建新的对象

       3、在创建s3对象时,依然首先在string pool中查找,发现存在目标对象,于是将该对象拷贝一份放入java堆内存中,将s3指向该对象。该过程创建了一个新对象

 

到目前为止,内存中的对象分配与引用情况如下图:

因为java中的==比较的是对象的引用,所以,以上程序应该输出的全是false

  • 大小: 4.3 KB
分享到:
评论

相关推荐

    String类创建对象问题

    ### String类创建对象问题 #### 一、String 类与常量池、字符串池的基本概念 在 Java 中,`String` 类并不属于八种基本数据类型之一,而是作为一个对象存在。这意味着 `String` 对象默认值为 `null`。尽管如此,`...

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

    ### 创建string对象过程的内存分配详解 #### 一、引言 在Java中,`String` 类是最常用的数据类型之一,用于表示不可变的字符序列。`String` 对象的创建涉及复杂的内存分配机制,特别是在Java虚拟机 (JVM) 的环境中...

    String对象创建问题

    在上述代码中,`s5`的值为`"hello world"`,但整个过程只创建了一个`StringBuilder`对象和最后的`String`对象。这比使用`+`运算符进行字符串拼接更高效,尤其是在循环中。 总的来说,理解`String`对象在编译期和...

    java对象创建过程

    一旦类被正确地加载和初始化后,就可以通过以下步骤来创建对象实例: 1. **分配内存**:JVM会在堆内存中为新创建的对象分配内存空间。分配内存时,会考虑对象所需的大小,包括实例变量的空间以及对齐填充等。如果...

    Java String创建对象实例解析

    Java String 创建对象实例解析 ...Java String 创建对象实例解析是一个复杂的过程,涉及到字符串对象的创建、内存分配、垃圾回收等方面。理解 Java String 创建对象实例解析对于 Java 开发者来说是非常重要的。

    java四种创建对象的方式

    在反序列化过程中,Java会自动调用对象的无参构造方法来创建对象。为了使一个类可以被反序列化,该类需要实现Serializable接口。示例代码如下: ```java ObjectInputStream ois = new ObjectInputStream(new ...

    String型的不可变性

    第一种形式用 new() 来创建对象的,它会存放在堆中,每调用一次就会创建一个新的对象。第二种形式是先在栈中创建一个对 String 类的对象引用变量 str,然后查找栈中有没有存放"abc",如果没有,则将"abc"存放进栈,...

    Java的String类讲解案例代码(String类使用:创建对象、比较、连接、截取、查找和替换、拆分...)StringBuf

    String类使用(创建字符串对象、比较、长度、连接、截取、查找和替换、切割和拆分、和其他类型的转换、格式化、判断、手动入池、其他操作) StringBuffer类 StringBuilder类 String、StringBuffer和StringBuilder的...

    list转换成string数组

    `String`对象一旦创建后,其内容就不能改变。 - **数组(Array)**:数组是一种基本的数据结构,用于存储固定大小的同类型元素。在Java中,数组的大小是固定的,一旦定义就无法更改。 #### 二、List转String数组的...

    反射创建对象

    本文将深入探讨如何使用反射创建对象,并在反射过程中进行赋值。 首先,我们需要理解Java中的`Class`对象。每个类在运行时都有一个与之关联的`Class`对象,它包含了该类的所有元数据。我们可以通过以下三种方式获取...

    java实例化对象的过程

    工厂方法是一种设计模式,它提供了一种创建对象的抽象,允许子类改变实例化过程。单例模式确保一个类只有一个实例,并提供全局访问点。 总的来说,Java实例化对象是编程中的基本操作,它涉及到类的构造,内存分配,...

    .NET再谈String

    例如,当我们执行`s2 = "Hello world"`时,实际上是在创建一个新的`String`对象,并让`s2`指向这个新对象,而不是修改原来"Hello"的引用。这就是为什么在示例代码中`s1`和`s2`的引用在第一次比较时相等,而在第二次...

    .net创建存储过程函数

    总结来说,.NET 创建存储过程函数提供了一种更灵活且功能强大的方式来处理 SQL Server 中的数据,利用 .NET 的强类型和面向对象的特性,提高了代码的可读性和安全性。通过启用 CLR 集成并在 Visual Studio 中创建 ...

    浅析Java语言中对象的创建过程.pdf

    Java对象的创建过程分为两个步骤:首先是声明对象引用,然后是通过new关键字创建对象实体。对象引用只保存在栈内存中,指向堆内存中对象的内存地址。而对象实体则存储在堆内存中,包含成员变量和方法信息。 以Test...

    C#_String与string的区别

    一旦一个`String`对象被创建,其内容就不能被更改。这是因为`String`类被设计为`sealed`,即封闭的,不允许任何子类覆盖其方法或添加新功能。同时,`String`的所有成员变量都被声明为`private readonly`,从而确保了...

    Java中的String池

    在Java语言中,字符串是极为常用的一种数据类型,而字符串的创建、比较等操作在实际开发过程中频繁出现。本篇文章将详细解释Java中的String池概念及其重要性,并通过一个示例代码深入理解String池的工作机制。 ####...

    string用法详解

    除了上述提到的构造函数、操作符重载、追加文本、赋值、比较和删除等功能外,`string` 类还提供了很多其他的成员函数,如查找、替换、插入等,这些都是在实际开发过程中非常实用的功能。熟练掌握这些功能能够帮助...

    调用存储过程入参出参为自定义对象_支持批量

    本文详细介绍了如何在Java中通过调用存储过程实现批量数据处理,并特别关注了入参为二维数组的批量插入及出参为自定义对象(二维数组)的情况。通过使用Java的`CallableStatement`和Oracle JDBC的特定API,可以有效...

    List转换成String数组

    2. **String[]**: 字符串数组,即由多个`String`对象组成的数组。 #### 三、转换方法详解 **方法一:使用toArray()方法** ```java List<String> list = new ArrayList<String>(); list.add("a1"); list.add("a2")...

Global site tag (gtag.js) - Google Analytics