每天一个知识点(二)String str=“i”与 String str=new String(“i”)一样吗?

简介: 不一样,使用String str="i",java虚拟机会把它分配到常量池中,而 String str=new String(“i”)创建了一个对象,会被分到堆内存中。

微信搜索《Java鱼仔》,每天一个知识点不错过


(一)每天一个知识点


String str=“i”与 String str=new String(“i”)一样吗?


(二)结论


不一样,使用String str="i",java虚拟机会把它分配到常量池中,而 String str=new String(“i”)创建了一个对象,会被分到堆内存中。


(三)再多学一点


Java为了避免产生大量的String对象,设计了一个字符串常量池。工作原理是这样的,创建一个字符串时,JVM首先为检查字符串常量池中是否有值相等的字符串,如果有,则不再创建,直接返回该字符串的引用地址,若没有,则创建,然后放到字符串常量池中,并返回新创建的字符串的引用地址。


所以,当你创建一使用String str="i"创建一个字符串时,str指向的是常量池中的这个字段。


String str=new String(“i”)使用的是标准的对象创建方式 一个对象创建时,在虚拟机中的执行过程如下:

Objectobj=newObject() 


Object obj会反映到java虚拟机栈的变量表中,作为一个引用类型数据出现,“new Object()”会反映到java堆中,在java堆上创建一个Object类型的实例数据值的结构化内存,这块内存的长度是不固定的。在java堆中还存放了了能查到此对象类型数据(对象类型、父类、接口、方法等)的地址信息,这些信息存放在方法区中。


简单来讲,String str=new String(“i”)把对象分到了堆内存中,String str="i"将对象分配到了字符串常量池中。



相关文章
|
2月前
|
存储 Java 对象存储
String str="Hello" 与 String str=new String(“Hello”)一样吗?
String str="Hello" 与 String str=new String(“Hello”)一样吗?
SAP ABAP 字符串模版(String Template)核心知识点举例说明试读版
SAP ABAP 字符串模版(String Template)核心知识点举例说明试读版
|
9月前
|
Java
每天一道面试题之String str=“i“与 String str=new String(“i”)一样吗?
每天一道面试题之String str=“i“与 String str=new String(“i”)一样吗?
|
10月前
|
Java 程序员 编译器
new String(“hello“)之后,到底创建了几个对象?
最近,有很多优秀的程序员从大厂毕业, 再加上大环境的影响,很多正在找工作的小伙伴也感觉技术面试越来越难,基本上都会问技术底层原理,甚至有些还会问到操作系统层面的知识。 如果技术功底不扎实,确实很难找到合适的岗位。
79 0
|
12月前
|
C# 索引
C#基础⑨——字符串(string str = null 与string str = ““的区别)
字符串数组变字符串(字符串数组变新的字符串数组)
|
存储 编译器 C++
C++知识点,关键字inline ,String,强制类型转化
🐰inline 函数 🐰string类 🌸1.字符串的定义: 🌸2.访问字符串 🌸3.字符串的连接 🌸4.字符串的比较 🌸5.字符串长度的计算 🌸6.字符串的交换 🌸7.字符串数组 🐰static_cast强制类型转化
Java 最常见的面试题:String str="i"与 String str=new String("i")一样吗?
Java 最常见的面试题:String str="i"与 String str=new String("i")一样吗?
【剑指offer知识点】List转int[],List转String,String转int,char[]转String,String 转char[],List转String[]
【剑指offer知识点】List转int[],List转String,String转int,char[]转String,String 转char[],List转String[]
108 0
String zy1=new String("小朱"); String zy2=new String("小朱");建了几个对象?
String zy1=new String("小朱"); String zy2=new String("小朱");建了几个对象?
String s = new String("java"); 只创建了一个对象!好好看好好学,要了解原理!
String s = new String("java"); 只创建了一个对象!好好看好好学,要了解原理!
String s = new String("java"); 只创建了一个对象!好好看好好学,要了解原理!