关于 String s = new String("xyz")

原创文章,转载请注明地址:http://www.54tianzhisheng.cn/2017/04/05/String-new/

你知道在 java中除了 8 种基本类型外,其他的都是类对象以及其引用。所以 "xyz "在 java中它是一个String对象.对于 string类对象来说他的对象值是不能修改的,也就是具有不变性。

看:
String s= "hello "; s= "Java "; String s1= "hello "; String s2=new String( "hello ");

结果如下图:

1

啊,s 所引用的 string对象不是被修改了吗?之前所说的不变性,去那里了啊?

你别着急,让我告诉你说发生了什么事情:在 jvm 的工作过程中,会创建一片的内存空间专门存入 string 对象。我们把这片内存空间叫做 string 池

String s = "hello "; 当 jvm 看到 "hello",在 string 池创建 string 对象存储它,并将他的引用返回给s。s = "java ",当 jvm 看到 "java ",在 string 池创建新的 string 对象存储它,再把新建的 string 对象的引用返回给s。而原先的 "hello"仍然在 string 池内。没有消失,他是不能被修改的。

所以我们仅仅是改变了s的引用,而没有改变他所引用的对象,因为 string 对象的值是不能被修改的。
String s1 = "hello" ; jvm 首先在 string 池内里面看找不找得到字符串 "hello", 如果找得到,返回他的引用给 s1,否则的话就会创建新的 string 对象,放到 string 池里。这里由于 s = "hello"了,对象已经被引用,所以依据规则 s 和 s1 都是引用同一个对象。所以 s == s1 将返回 true。( == 对于非基本类型,是比较两引用是否引用内存中的同一个对象,这里先不区分 == 和 equals 的区别 )

2

String s2 = new String( "hello"); jvm 首先在 string 池内里面看找不找得到字符串 "hello", 如果找得到, 不做任何事情,否则的话就会创建新的 string 对象,放到 string 池里面。由于遇到了 new,还会在内存上(不是 string 池里面)创建 string 对象存储 "hello",并将内存上的(不是 string 池内的)string 对象返回给 s2。所以 s == s2 将返回 false,不是引用同一个对象。

3

好现在我们看题目:String s = new String( "xyz ");首先在 string 池内找,找到?不创建 string 对象,否则创建一个对象,遇到 new 运算符号了,在内存上创建 string 对象,并将其返回给 s,又一个对象
所以总共是 1个 或者 2个对象 。

而为什么在网上都说 String s=new String("xyz"); 创建了2个对象?那可能因为它就写这么一句代码,误让人默认的认为执行代码之前并不实例任何一个 String 对象过(也许 很多人不会这么想,),跟着别人或者不经思考的就说2个,斟是说存放在栈内存中专门存放 String 对象引用的 s 变量是一个对象!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 33,592评论 18 399
  • java笔记第一天 == 和 equals ==比较的比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量...
    jmychou阅读 5,441评论 0 3
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,179评论 19 139
  • 乡里人的思维方式 文/唐小米 在我的乡镇上,发生了一起规模不大的冲突事件。在年关将至的三四点,一个阳光明媚的下午。...
    唐小米MrT阅读 2,801评论 0 0
  • 时间不断的重复着,正如很多轨迹一样。 为什么我会喜欢一个人的狂欢,我可以游荡在自己的精神世界,荡漾在浩瀚的书海中;...
    沐府墓主阅读 1,477评论 0 0

友情链接更多精彩内容