`
guyunduzai
  • 浏览: 16904 次
  • 性别: 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对象过程的内存分配&&包含多个例子,更加容易理解~~

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

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

    JVM 知识点整理:对象的创建过程

    这就意味着类已经被加载,创建对象时这步类加载就不要执行了 分配内存 在类的加载检查通过后,接下来虚拟机将为新生对象分配内存。对象所需内存大小在类加载完成后便可以完全确定。为对象分配空间的任

    jsp内置对象的用法

    exception对象是一个例外对象,当一个页面在运行过程中发生了例外,就产生这个对象。如果一个JSP页面要应用此对象,就必须把isErrorPage设为true,否则无法编译。他实际上是java.lang.Throwable的对象 序号 方 法...

    java 面对对象编程.pdf.zip

    面向对象和面向过程的区别 成员变量与局部变量的区别 创建一个对象用什么运算符?对象实体与对象引用有何不同? 对象的相等和引用相等的区别 类的构造方法的作用是什么? 如果一个类没有声明构造方法,该程序能正确执行...

    String.Slugify.js:扩展 String 原生对象有一个 slugify 方法,对 url slugs 很有用

    字符串.Slugify 扩展 String 本机对象以具有 slugify 方法,对 url slug 很有用。如何使用String.Slugify 扩展了原生 String 对象,因此它适用于任何普通字符串。 "slugify ME n%ø#w" . slugify ( ) 返回“slugify-...

    JAVA面向对象详细资料

    6 如何使用类创建对象 10 7 引用与实例 11 8 实例属性与实例方法 11 9 实例属性与实例方法的使用 12 10 实例属性属于实例本身,与其他实例没有关系 13 11 javaBean编码规范 14 12 练习: 15 13 什么构造方法 16 14 ...

    底层的技术-----反射技术

    底层的技术-----反射技术 String类的是一种特殊的引用类型,特殊在创建方式 通过字符串常量赋值String str = “abc”;... 设计一个工具,代替我们自己创建对象的过程 传递一个字符串帮我们创建一个对

    java6string源码-buildobjects:将定义构建为Java代码

    java6string源码构建对象 buildobjects 是一个基于对象的通用构建工具 buildobjects 提供了许多 Java 类,允许您以真正面向对象的方式编写构建过程。 它不会强迫您采用某种方式来构建代码和项目。 相反,它旨在提供...

    [java]读书笔记整理:一切都是对象

    用堆进行存储分配比用堆栈进行存储分配需要更多的时间(如果确实可以在java中向在C++中一样在栈中创建对象)。 4) 静态存储 这里的“静态”是指“在固定的位置”(尽管也在RAM里)。静态存储里存放程序运行时一直...

    java面向对象程序设计.pptx

    下面我们将通过一个具体的实例来理解什么是类,如何定义类、创建对象和使用对象。 时钟类的设计: (1) 数据属性: 时(int hour); 分 (int minute); 秒(int second)。 (2) 行为: 设置时间 setTime() ; 显示...

    存储过程的安全及性能优化

    创建对象 EXEC @hr = sp_OACreate 'PB_ExtendProcedure.ExtendProcedure',@object out IF @hr<>0 BEGIN EXEC sp_OAGetErrorInfo @object,@src,@desc out select hr = convert(varchar(4),@hr),Source=@src,...

    Java String、StringBuffer、StringBuilder(基于源码探索)

    String是Java类对象,Java通过String来创建和操作字符串。 从源码中我们可以看出,String使用byte[]数组进行字符串的存储,且byte[]数组被final关键字修饰。我们知道当final修饰成员变量时,如果成员变量是基本数据...

    js中new一个对象的过程

    1. 创建空对象{} 2. 使用新对象,调用函数,函数中的this被指向新实例对象:  {}.构造函数();  3. 设置新对象的constructor属性为构造函数的名称,设置新对象的__proto__属性指向构造函数的prototype对象 4. 将...

    Java面向对象程序设计方案练习题(1).doc

    为MyTime类定义构造方法 以方便创建对象时初始化成员变量。 再定义diaplay方法 用于将时间信息打印出来。 为MyTime类添加以下方法 addSecond(int sec) addMinute(int min) addHour(int hou) subSecond(int sec) ...

    object-tie:在JSON对象和文件之间创建链接,该链接可在进行更改时随时更新文件

    创建对象的结合 addKey(object,object) 将键/值对添加到对象,其中arguments [0]是对象,argument [1]是要添加的键/值对 deleteKey(object,string) 从对象中删除键/值对,其中object是包含要在第一级中删除...

    .NET DbHelper 数据访问类(MSSQL Mysql ORACLE)

    /// 创建 DbConnection 对象实例。 /// /// <returns>DbConnection 对象实例。 DbConnection CreateConnection(); /// /// 创建 DbCommand 对象实例。 /// /// <returns>DbCommand 对象实例。 ...

    C#基础之内存分配

    1.创建一个对象  一个对象的创建过程主要分为内存分配和初始化两个环节。在.NET中CLR管理的内存区域...在IL中可以看到newobj、ldstr(创建string对象)、newarr(用于分配新的数组对象)、box(装箱)等常见的创建对象的指

    Delphi字符串链表类

    //第三步,创建对象。 对象名.Create(); //对象的方法说明 //对象创建后,自动产生一个字符串头节点 //使用Sethead方法可以设置头结点的值(字符串) //使用Appendnode方法增加结点,实参中给出需要增加的节点...

    C#中StringBuilder用法以及和String的区别分析

    StringBuilder 类解决了对字符串进行重复修改的过程中创建大量对象的问题。初始化一个StringBuilder 之后,它会自动申请一个默认的StringBuilder 容量(默认值是16),这个容量是由Capacity来控制的.并且允许,我们根据...

Global site tag (gtag.js) - Google Analytics