面试题之String str = new String(“abc”); 创建了几个对象

面试题之String str = new String(“abc”); 创建了几个对象今天去面试的时候碰到了这个问题:String str = new String("abc"); 创建了几个对象,回来自己研究并查阅资料才发现答错了。。网上的争论不少,有的说是两个,答案应该是:两个或一个理由解释如下:都了解java 的字符串常量缓冲区(字符串池,字符串常量池),如果代码是这样的:String str2 = new String("abc"); 并且 abc 字…

大家好,又见面了,我是你们的朋友全栈君。

今天去面试的时候碰到了这个问题:String str = new String(“abc”); 创建了几个对象,回来自己研究并查阅资料才发现答错了。。
网上的争论不少,有的说是两个,答案应该是:两个或一个
理由解释如下:
都了解java 的字符串常量缓冲区(字符串池,字符串常量池),
如果代码是这样的:

String str2 = new String("abc");

 

并且 abc 字符串之前没有用过,这毫无疑问创建了两个对象,一个是new  String 创建的一个新的对象,一个是常量“abc”对象的内容创建出的一个新的String对象,

但是如果代码是这样子的:

String str1 = "abc";
		
String str2 = new String("abc");

嗯,创建几个就不好说了,我们还是测试一下吧,首先我们打开cmd.exe, 通过javac *.java编译好该Java文件,然后通过命令javap -c *来查看java编译后的ByteCode字节码,

面试题之String str = new String("abc"); 创建了几个对象

ldc的含义是:将常量值从常量池中取出来并且压入栈中。从上图中,我们可以看到第0行和第7行中的字符串引用是同一个,这说明了,在编译期间,该字符串变量的值已经确定了下来,并且将该字符串值缓存在缓冲区中,同时让该变量指向该字符串值,后面如果有使用相同的字符串值,则继续指向同一个字符串值

所以String str2 = new String(“abc”); 此时就创建一个对象,而abc 则是从字符串常量缓冲区中取出来的。

ok。就是这个样子。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/147245.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • springboot启动原理总结_Springboot启动流程

    springboot启动原理总结_Springboot启动流程说明:我这里只说结果,和简单的代码,面试应该是够了,毕竟源码内容不是所有人都能记住的,如果要学习源码请看其他大佬的文章,写的比较详细,而且差不多都一样。背景:面试经常会问道springboot启动流程或者原理,看了多数博友的文章,都是大同小异,但是面试的时候不可能那么多,所以我将启动流程总结一下。启动流程:1.启动springboot这需要执行SpringApplication执行类即可2.执行的时候执行两个重要的代码,@springBootAppli…

    2022年8月20日
    7
  • python global关键字_python中global是什么意思

    python global关键字_python中global是什么意思第一,两者的功能不同。global关键字修饰变量后标识该变量是全局变量,对该变量进行修改就是修改全局变量,而nonlocal关键字修饰变量后标识该变量是上一级函数中的局部变量,如果上一级函数中不存在该局部变量,nonlocal位置会发生错误(最上层的函数使用nonlocal修饰变量必定会报错)。第二,两者使用的范围不同。global关键字可以用在任何地方,包括最上层函数中和嵌套函数中,即使之前未定义该变量,global修饰后也可以直接使用,而nonlocal关键字只能用于嵌套函数中,并且外层函数中定义了

    2022年9月6日
    5
  • 《SiamFC++:Towards Robust and Accurate Visual Tracking with Target Estimation Guidelines》论文笔记

    《SiamFC++:Towards Robust and Accurate Visual Tracking with Target Estimation Guidelines》论文笔记参考代码:video_analyst1.概述导读:这篇文章指出之前的一些跟踪算法没有深入讨论针对跟踪任务的实质,很多时候只是在某些点上进行突破,因而最后方法的性能总是有局限性的。对此文章深入分析了跟踪网络的特性,因而对跟踪网络的设计提出了4点建议:G1(目标位置估计和目标判别需要接耦,分别具有各自的分支)/G2(目标判别置信度不能与实际相模糊)/G3(不能依赖数据分布等先验知识,否则导致泛化性鲁棒性不强)/G4(目标位置的估计应该准确)。正是基于上的4点设计指导,文章设计了SiamFC++网络,在5

    2022年9月27日
    1
  • Spring Boot 核心编程思想-第二部分-读书笔记

    怕什么真理无穷进一步有近一步的欢喜说明本文是Spring Boot核心编程思想记录的笔记,书籍地址:Spring Boot编程思想(核心篇):这篇文档会记录这本我的一些读书的思考,内容可能…

    2022年3月1日
    42
  • Python 相关文件常见的后缀名详解[通俗易懂]

    Python 相关文件常见的后缀名详解[通俗易懂]常见的Python文件后缀有:py、pyc、pyo、pyi、pyw、pyd、pyx等。本文只介绍相对常见的一些后缀名,至于一些特别冷门的文件格式,例如一些文章提到的pyz、pywz、rpy、pyde、pyp、pyt等,并没有进行研究。因为这些扩展名资料很少,网上搜到的文章似乎都是同一个出处,只是简单提了一句,说了等于没说。py最常见的Python源代码文件。实际上如果用python+文件的方式运行代码,只要文件内容相同,后缀名是不重要的,也就是说下面的运行结果都是等价.

    2022年9月16日
    0
  • ios—-protocol, optional ,delegate

    ios—-protocol, optional ,delegate

    2021年7月10日
    53

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号