转自:http://www.cnblogs.com/ydpvictor/archive/2012/09/09/2677260.html

————————————————————————————————————————

String str=new String("abc");   紧接着这段代码之后的往往是这个问题,那就是这行代码究竟创建了几个String对象呢?

相信大家对这道题并不陌生,答案也是众所周知的,2个。

接下来我们就从这道题展开,一起回顾一下与创建String对象相关的一些JAVA知识。

我们可以把上面这行代码分成String str、=、"abc"和new String()四部分来看待。String str只是定义了一个名为str的String类型的变量,因此它并没有创建对象;=是对变量str进行初始化,将某个对象的引用(或者叫句柄)赋值给它,显然也没有创建对象;现在只剩下new String("abc")了。那么,new String("abc")为什么又能被看成"abc"和new String()呢?

我们来看一下被我们调用了的String的构造器:

public String(String original) {  //other code ...  }   大家都知道,我们常用的创建一个类的实例(对象)的方法有以下两种:

一、使用new创建对象。

二、调用Class类的newInstance方法,利用反射机制创建对象。

我们正是使用new调用了String类的上面那个构造器方法创建了一个对象,并将它的引用赋值给了str变量。同时我们注意到,被调用的构造器方法接受的参数也是一个String对象,这个对象正是"abc"。由此我们又要引入另外一种创建String对象的方式的讨论——引号内包含文本。

这种方式是String特有的,并且它与new的方式存在很大区别。

String str="abc";

毫无疑问,这行代码创建了一个String对象。

String a="abc";  String b="abc";   那这里呢?

答案还是一个。

String a="ab"+"cd";   再看看这里呢?

答案是三个。

说到这里,我们就需要引入对字符串池相关知识的回顾了。

在JAVA虚拟机(JVM)中存在着一个字符串池,其中保存着很多String对象,并且可以被共享使用,因此它提高了效率。由于String类是final的,它的值一经创建就不可改变,因此我们不用担心String对象共享而带来程序的混乱。字符串池由String类维护,我们可以调用intern()方法来访问字符串池。

我们再回头看看String a="abc";,这行代码被执行的时候,JAVA虚拟机首先在字符串池中查找是否已经存在了值为"abc"的这么一个对象,它的判断依据是String类equals(Object obj)方法的返回值。如果有,则不再创建新的对象,直接返回已存在对象的引用;如果没有,则先创建这个对象,然后把它加入到字符串池中,再将它的引用返回。因此,我们不难理解前面三个例子中头两个例子为什么是这个答案了。

只有使用引号包含文本的方式创建的String对象之间使用“+”连接产生的新对象才会被加入字符串池中。对于所有包含new方式新建对象(包括null)的“+”连接表达式,它所产生的新对象都不会被加入字符串池中,对此我们不再赘述。因此我们提倡大家用引号包含文本的方式来创建String对象以提高效率,实际上这也是我们在编程中常采用的。

栈(stack):主要保存基本类型(或者叫内置类型)(char、byte、short、int、long、float、double、boolean)和对象的引用,数据可以共享,速度仅次于寄存器(register),快于堆。

堆(heap):用于存储对象

转载于:https://www.cnblogs.com/kaikailele/p/3931053.html

云端飘 String s=new String(abc)创建了几个对象?相关推荐

  1. String str = new String(abc)创建了几个对象?结合源码解析

    String str = new String("abc")创建了几个对象?结合源码解析 首先,我们看一下jdk源码: 1 /** 2 * Initializes a newly ...

  2. String s=new String(abc)创建了2个对象的原因

    问题:String str=new String("abc"); 这行代码究竟创建了几个String对象呢? 相信大家对这道题并不陌生,答案也是众所周知的,2个. 接下来我们就从这 ...

  3. new string(abc)创建了几个对象_面试题系列第2篇:new String()创建几个对象?有你不知道的...

    Java面试题系列:将面试题中比较经典和核心的内容写成系列文章持续在公众号更新,可巩固基础知识,可梳理底层原理,欢迎大家持续关注[程序新视界].本篇为面试题系列第2篇. 常见面试问题 下面代码中创建了 ...

  4. Java:面试题:String s=new String(abc)创建了几个对象?

    String str=new String("abc");   紧接着这段代码之后的往往是这个问题,那就是这行代码究竟创建了几个String对象呢? 相信大家对这道题并不陌生,答案 ...

  5. string s = new string(“xyz“);创建了几个对象_「005」-JavaSE面试题(五):String类

    第一期:Java面试 - 100题,梳理各大网站优秀面试题.大家可以跟着我一起来刷刷Java理论知识 [005] - JavaSE面试题(五):String类 第1问:String.StringBuf ...

  6. 创建和编辑AutoCAD对象(VBApython)

    创建python与CAD的连接 import win32com.client import pythoncomacad = win32com.client.Dispatch("AutoCAD ...

  7. java中字符串的创建_【转载】 Java中String类型的两种创建方式

    本文转载自 https://www.cnblogs.com/fguozhu/articles/2661055.html Java中String是一个特殊的包装类数据有两种创建形式: String s ...

  8. String str =new String(“abc“)和 String str = “abc“的比较

    String是一个非常常用的类,应该深入的去了解String 如: String str =new String("abc") String str1 = "abc&qu ...

  9. 请别再拿“String s = new String(xyz);创建了多少个String实例”来面试了吧---转

    http://www.iteye.com/topic/774673 羞愧呀,不知道多少人干过,我也干过,面壁去! 这帖是用来回复高级语言虚拟机圈子里的一个问题,一道Java笔试题的.  本来因为见得太 ...

最新文章

  1. JavaScript 同时建立多个websocket连接
  2. 设置 mock_【学习】接口测试-使用mock生产随机数据
  3. mysql职业要求_为什么面试的每一家都要求掌握MySQL?
  4. DigSci科学数据挖掘大赛:如何在3天内拿下DigSci亚军
  5. mq多个消费者消费一个消息_一个普通消费者的米家产品使用感受
  6. 垃圾分类毕设java程序_垃圾“拍一拍”,分类不用愁!生活垃圾分类查询小程序上线啦...
  7. jQuery迷你帮助查找功能
  8. SQL Server 阻塞原因分析
  9. java使用poi读取存储excel表格,包括xls和xlsx格式
  10. net configuration assistant 没反应_@尾款人:错过这条推送,7000多块就没了……
  11. HPZ420 工作站主板图
  12. uni-app通过canvas将两张图片合成一张图片
  13. 原win7系统迁移到SSD固态硬盘
  14. WIN2003 R2安装EPSON6200L打印机问题解决
  15. 无人机测量在房地一体项目中的应用
  16. 我读《格鲁夫给经理人的第一课》
  17. 苹果和android充电线一根,非常实用!一根充电线,同时搞定苹果、安卓、Type-c,出门带它就够了...
  18. vmware虚拟机安装win7_vmware虚拟机中安装mac Catalina10.15
  19. 孩子立刻就不玩游戏了,因为他找到更好玩的东西!
  20. Windows 10, version 22H2 (updated March 2023) 简体中文版、英文版下载

热门文章

  1. 大龄屌丝自学笔记--Java零基础到菜鸟--001
  2. CABasicAnimation 动画组合
  3. java.lang.IllegalArgumentException: Path index does not start with a / character
  4. DELPHI第三方控件及组件大全(安装方法与使用)
  5. Castle.ActiveRecord的嵌套事务处理
  6. 几u产品结构计算机什么意思,计算机u系统组成.ppt
  7. jquery easyui datagrid 分页 详解
  8. DPDK pmd驱动初始化(十九)
  9. html 流动效果,html5 canvas流动的海浪特效
  10. 常见算子使用_spark快速入门(二)spark粗略流程简述及常见名词解释