当前位置:Shooter-GamesGames

堆和栈分【练:fēn】别存放什么

2025-02-25 09:39:15Shooter-GamesGames

String存放在堆中还是栈中?在Java中,字符串是特殊的。Java特别注意字符串类型,其他类型则没有这种类型。例如,要创建字符串对象,您无需使用“ new ”关键字。要创建其他类型的对象,必须使用“ new”关键字

String存放在堆中还是栈中?

在Java中,字符串是特殊的。Java特别注意字符串类型,其他类型则没有这种类型。例如,要创建字符串对象,您无需使用“ new ”关键字

要创建其他类型的对象,必须使用“ new”关键字。像这样,字符串受到Java的特别注意。这种注意值得一阵(繁体:陣),因为【pinyin:wèi】在开发任何类型的应用程序时,几乎在所有地方都使用了字符串

在将字符串对《繁体:對》象也存储在内存中的同时,Java对它们进行了特殊处理。阅读本文之后,您将了解如何在(zài)内存中对它们进行特殊(pinyin:shū)处理。

乐鱼体育

众所周知,JVM将分配给Java程序的内存分为两部分。一个是堆栈,另《读:lìng》一个是堆。堆栈用于(拼音:yú)执行目的,堆用于存储目的

直播吧

在该(繁:該)堆内存中,JVM分配了一些专门用于字(zì)符串文字的内存。堆内存{练:cún}的这一部分称为字符串常量池。

每当您使用字符串文字创建字符串对象时,该对《繁体:對》象都会存储在字符串常量池中,而每当您使用new关键字创建字符串对象时,此类对象都会存储在(zài)堆内存中。

例如,当您创建如下所示的字符串对象时,它们将存储在字符串常量池中。

String s1 = "abc"

String s2 = "xyz"

String s3 = "123"

String s4 = "A"

并且当您使用如下所示的new关键{pinyin:jiàn}字创建字符串对《繁体:對》象时,它们将存《拼音:cún》储在堆内存中。

String s5 = new String("abc")

char[] c = {"J", "A", "V", "A"}

澳门新葡京

String s6 = new String(c)

String s7 = new String(new StringBuffer())

这就是字(读:zì)符串常量池在内存中的外观。

关[繁:關]于字符串常量池的另一(yī)件有趣的事情是,根据对象的内容将池空间分配给对象。池中不会有两个对象(pinyin:xiàng)具有相同的内容。

当您使用字符串{pinyin:chuàn}文字创建字符串对象时,就会发生这种情况,

开云体育

“当您使用字符串文字创建字符串对象时,JVM首先检[繁体:檢]查要创建的对象的内容。如果池中存在具有相同内容的对象,则它将返回该对象的引用。它不会创建新对象。如《拼音:rú》果内容与现有对象不同,则只能创建新对象。”

但是,当您使用new关娱乐城键字创建字{zì}符串对象时,无论内容是否相同,都会创建一个新对象。

这可以通过使用“ ==”运算符来证明。如《rú》果两个对象在内存中具有相同的物理地址,则“ ==”运算符将返回true,否则《繁体:則》它将返回false。在下面的示例中,s1和s2使用字符串【读:chuàn】文字“ abc”创建

因此,s1 == s2返回true。其(读:qí)中,s3和s4是使用具有相同内容(练:róng)的新运算符创建的。但是,s3 == s4返回false

public class StringExamples

{

public static void main(String[] args)

开云体育

//Creating string objects using literals

String s1 = "abc"

极速赛车/北京赛车

世界杯

娱乐城

String s3 = new String("abc")

String s4 = new String("abc")

System.out.println(s3 == s4) //Output : false

澳门永利

}

}

简【繁体:簡】单来说,字符串常量池中不能有两个内容相同的字符串对象。但是,堆内存中《拼音:zhōng》可以有两个内容相同的字符串对象。

本文链接:http://10.21taiyang.com/Shooter-GamesGames/8995343.html
堆和栈分【练:fēn】别存放什么转载请注明出处来源