String s1 = new String(abc)到底创建了几个对象?底层原理是什么?
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)到底创建了几个对象?底层原理是什么?相关推荐
- 【Java深入理解】String str = “a“ + “b“ + “c“到底创建了几个对象?
String str = "a" + "b" + "c"到底创建了几个对象?这是我们在讨论中最经常遇到的一个问题同时也是面试题.我们都知道在 ...
- String s=a+b+c,到底创建了几个对象?
首先看一下这道常见的面试题,下面代码中,会创建几个字符串对象? String s="a"+"b"+"c"; 如果你比较一下Java源代码和反 ...
- String s=“abc“ 和 String s1=new String(“abc“)和String s2=new String(“abc“)之间的关系
这篇文章针对困扰新手初学java基础时常遇到的难以理解的一个问题!!! ==∶它的作用是判断两个对象的地址是不是相等.即,判断两个对象是不是同一个对象(基本数据类型==比较的是值,引用数据类型==比较 ...
- String s1 = new String(hello); String s2 = hello;的区别
String s1 = new String("hello"); String s2 = "hello"; System.out.println(s1 == s ...
- String s1=new String(“abc“); 和String s1=“abc“区别
在讨论他们的区别时,我们要知道java中的内存,主要分为堆和栈.栈中一般存放的是java中的基本数据变量 比如 int,double,float 还存放了对象的引用变量 如 Person person ...
- 【0087】【创建postgres后端进程】PostgreSQL创建监听端口的底层原理(2)
文章目录 1. 概述 1.1 监听ip.port选项参数 1.2 socket服务器示意图 2. MAXLISTEN和ListenSocket 3. 初始化on_proc_exit()函数 4. 解析 ...
- java s1=abc s2=abc s1==s2_经典问题:String s1 = abc 与 String s2 = new String(abc)的区别...
这是以前刚学Java那会经常被问到的问题,并且也会经常出现在面试中.这个问题不仅仅只局限于Java,可以适用于其他大部分语言,正好最近有个小朋友在学编程,特此整理一下. String s1 = &qu ...
- Java:面试题:String s=new String(abc)创建了几个对象?
String str=new String("abc"); 紧接着这段代码之后的往往是这个问题,那就是这行代码究竟创建了几个String对象呢? 相信大家对这道题并不陌生,答案 ...
- string s = new string(“xyz“);创建了几个对象_「005」-JavaSE面试题(五):String类
第一期:Java面试 - 100题,梳理各大网站优秀面试题.大家可以跟着我一起来刷刷Java理论知识 [005] - JavaSE面试题(五):String类 第1问:String.StringBuf ...
- 请别再拿“String s = new String(xyz);创建了多少个String实例”来面试了吧---转
http://www.iteye.com/topic/774673 羞愧呀,不知道多少人干过,我也干过,面壁去! 这帖是用来回复高级语言虚拟机圈子里的一个问题,一道Java笔试题的. 本来因为见得太 ...
最新文章
- vs添加码云远程_项目git步骤,将项目托管到码云。git本地分支推送到远程分支...
- 《数据结构与算法分析:C语言描述》复习——第六章“排序”——基数排序
- 关于“习惯”的精彩分析
- 神经网络—pytorch60min入门教程
- 成都东软学院新生周赛(五)
- 2013.7.15DAY2
- 谈谈2018年技术趋势和架构规划
- 云服务器的使用(一)
- 近世代数概论------整数
- 几个好用的Visual Studio插件推荐。
- 2022年湖北中级工程师职称评审详细流程是哪些步骤呢? 甘建二
- 如何做一个炫酷的动画网站-css实现图片上下浮动效果
- java开发一款雷电游戏
- 为企业数据安全保驾护航
- 左手咖啡,右手小鹿茶,你真的看懂了瑞幸咖啡的“阳谋”?
- 计算机专业买什么笔记本牌子,计算机专业买什么笔记本
- [附源码]Java计算机毕业设计SSM高校教室管理系统
- sonarqube连mysql_sonarqube接入mysql数据库实例
- Yupoo(又拍网)的系统架构
- hdu 5439 Ponds(长春网络赛——拓扑排序+搜索)