java创建字符串对象 的意思是否就是在堆内存开辟一个空间存放字符串?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java创建字符串对象 的意思是否就是在堆内存开辟一个空间存放字符串?相关的知识,希望对你有一定的参考价值。
是的。创建对象时是开辟空间,赋值后才存储。
方式一:String a = “aaa” ;
方式二:String b = new String(“aaa”);
两种方式都能创建字符串对象,但方式一要比方式二更优。
因为字符串是保存在常量池中的,而通过new创建的对象会存放在堆内存中。
常量池中已经有字符串常量”aaa”
通过方式一创建对象,程序运行时会在常量池中查找”aaa”字符串,将找到的”aaa”字符串的地址赋给a。
通过方式二创建对象,无论常量池中有没有”aaa”字符串,程序都会在堆内存中开辟一片新空间存放新对象。
常量池中没有字符串常量”aaa”
通过方式一创建对象,程序运行时会将”aaa”字符串放进常量池,再将其地址赋给a。
通过方式二创建对象,程序会在堆内存中开辟一片新空间存放新对象,同时会将”aaa”字符串放入常量池,相当于创建了两个对象。
iOS 对象的内存管理细节
通过类创建对象
1.创建对象时,开辟存储空间,通过new方法创建的对象会在 堆 内存中开辟一块存储空间
2初始化所有属性都在堆内存中完成
3.返回值真地址,指针在栈内存中,指针指向的地址是堆里创建对象时的地址
创建对象的时候返回的地址就是类的第0个属性的地址 但是需要注意的是 这里的第0和属性不是程序员创建的第一个属性 而是系统帮组创建的isa属性 isa属性是一个指针 占8个字节
isa会指向创建这个类的那个类 其实我们所说的类 也是一个对象 平四我们所说的创建一个对象其实就是通过一个类对象来创建一个新的对象(实例对象)
类对象是系统帮我们创建好的对象 里面保存了当前对象的所有方法
实例对象 是程序员自己手动通过new来创建的 实例对象中的isa指针就指向了创建该实例对象的那个类对象
isa指针就是指向类对象的
以上是关于java创建字符串对象 的意思是否就是在堆内存开辟一个空间存放字符串?的主要内容,如果未能解决你的问题,请参考以下文章