String s1 = new String(“abc”)到底创建了几个对象?底层原理是什么?

 要想充分了解创建了几个对象,我们需要了解JVM底层原理,String s1 = new String("abc")
分别在栈,堆,常量池的位置。
  • 在JDK1.6即以前,常量池位于JVM的方法区中。(为了便于区分,主要讲1.6)
  • 在JDK1.7即以后,常量池放在堆中。
  •  String s = new String("abc");方式创建对象,在内存中创建了几个对象?解析:两个:一个是堆空间中new结构一个是char[]对应的常量池中的数据:"abc"String s = "abc";方式创建对象,在内存中创建了几个对象?解析:一个是char[]对应的常量池中的数据:"abc"
    详细解释如下:
    

1.java.lang.String类的使用说明

 1.String声明为final的,不可被继承2.String实现了Serializable接口:表示字符串是支持序列化的。实现了Comparable接口:表示String可以比较大小3.String内部定义了final char[] value用于存储字符串数据4.通过字面量的方式(区别于new给一个字符串赋值,此时的字符串值声明在字符串常量池中)。5.字符串常量池中是不会存储相同内容(使用String类的equals()比较(重写过),返回true)的字符串的。

2.String s1 = new String("abc") 内存结构图

3.String s1 = "abc"String s1 = new String("abc") 区别


区别:String str1 = "abc"直接str1存储的是常量池中的地址值
String str2 = new String("abc") str2存储的是在堆中的 new String()的地址值
new String()存放的是跟str1相同指向的常量池的地址值。

4.栈、堆、方法区在创建对象时存储内容总结

栈:一般存放局部变量,正在运行的方法等压入栈中,还存放创建对象时的引用变量例如 String str1 = "abc";中的str1

堆: 我们将new出来的结构(比如:数组、对象)加载在对空间中。
补充:对象的属性(非static的)加载在堆空间中。

方法区:类的加载信息、常量池、静态域

String s1 = new String(abc)到底创建了几个对象?底层原理是什么?相关推荐

  1. 【Java深入理解】String str = “a“ + “b“ + “c“到底创建了几个对象?

    String str = "a" + "b" + "c"到底创建了几个对象?这是我们在讨论中最经常遇到的一个问题同时也是面试题.我们都知道在 ...

  2. String s=a+b+c,到底创建了几个对象?

    首先看一下这道常见的面试题,下面代码中,会创建几个字符串对象? String s="a"+"b"+"c"; 如果你比较一下Java源代码和反 ...

  3. String s=“abc“ 和 String s1=new String(“abc“)和String s2=new String(“abc“)之间的关系

    这篇文章针对困扰新手初学java基础时常遇到的难以理解的一个问题!!! ==∶它的作用是判断两个对象的地址是不是相等.即,判断两个对象是不是同一个对象(基本数据类型==比较的是值,引用数据类型==比较 ...

  4. String s1 = new String(hello); String s2 = hello;的区别

    String s1 = new String("hello"); String s2 = "hello"; System.out.println(s1 == s ...

  5. String s1=new String(“abc“); 和String s1=“abc“区别

    在讨论他们的区别时,我们要知道java中的内存,主要分为堆和栈.栈中一般存放的是java中的基本数据变量 比如 int,double,float 还存放了对象的引用变量 如 Person person ...

  6. 【0087】【创建postgres后端进程】PostgreSQL创建监听端口的底层原理(2)

    文章目录 1. 概述 1.1 监听ip.port选项参数 1.2 socket服务器示意图 2. MAXLISTEN和ListenSocket 3. 初始化on_proc_exit()函数 4. 解析 ...

  7. java s1=abc s2=abc s1==s2_经典问题:String s1 = abc 与 String s2 = new String(abc)的区别...

    这是以前刚学Java那会经常被问到的问题,并且也会经常出现在面试中.这个问题不仅仅只局限于Java,可以适用于其他大部分语言,正好最近有个小朋友在学编程,特此整理一下. String s1 = &qu ...

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

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

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

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

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

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

最新文章

  1. vs添加码云远程_项目git步骤,将项目托管到码云。git本地分支推送到远程分支...
  2. 《数据结构与算法分析:C语言描述》复习——第六章“排序”——基数排序
  3. 关于“习惯”的精彩分析
  4. 神经网络—pytorch60min入门教程
  5. 成都东软学院新生周赛(五)
  6. 2013.7.15DAY2
  7. 谈谈2018年技术趋势和架构规划
  8. 云服务器的使用(一)
  9. 近世代数概论------整数
  10. 几个好用的Visual Studio插件推荐。
  11. 2022年湖北中级工程师职称评审详细流程是哪些步骤呢? 甘建二
  12. 如何做一个炫酷的动画网站-css实现图片上下浮动效果
  13. java开发一款雷电游戏
  14. 为企业数据安全保驾护航
  15. 左手咖啡,右手小鹿茶,你真的看懂了瑞幸咖啡的“阳谋”?
  16. 计算机专业买什么笔记本牌子,计算机专业买什么笔记本
  17. [附源码]Java计算机毕业设计SSM高校教室管理系统
  18. sonarqube连mysql_sonarqube接入mysql数据库实例
  19. Yupoo(又拍网)的系统架构
  20. hdu 5439 Ponds(长春网络赛——拓扑排序+搜索)

热门文章

  1. 项目经理如何做好授权管理?
  2. 谷歌浏览器手势插件-双击关闭标签等多种国人手势
  3. 解决Ubuntu中Edge浏览器smartUp手势插件导致鼠标右键不灵敏的问题
  4. 一文看懂AutoML
  5. 别人犯错给自己的警醒(二):人取得成就之后很容易膨胀
  6. BUUCTF MISC刷题
  7. 计算机中输入法切换用户,如何在计算机中切换输入法
  8. 记录安装Node.js一直提示:The feature you are trying to use is on a network resource
  9. Windows系统用户目录Users迁移教程
  10. vue 渲染函数处理slot_Vue渲染函数详解