例如String str = new String(“str”),其中创建了常量池的str与堆中的一个对象实例,那str这个被声明的实例在哪个区呢,是堆吗
4条回答 默认 最新
关注 引自免费微信小程序:皆我百晓生
在Java中,字符串是一种引用类型的数据类型,它的声明可以在任何内存区域中进行。如果你在一个常量池中声明了一个字符串变量,并且这个常量池已经被垃圾回收器回收,那么这个字符串变量就是已经在堆内存中分配的。
在上述例子中,“str”是常量池的一个成员,所以它是位于堆内存中。如果你想获取这个字符串变量的地址,你可以这样写:
int address = str.getAddress();
在这个例子中,
address
是一个整数,表示了指向“str”的内存地址。这个值通常用于调用的方法返回的参数的地址。如果你想要获取这个字符串变量的实际值,你需要先将它赋值给一个字符串变量,然后再获取其值。这是因为在Java中,常量池和堆都是单例模式的一部分,它们并不是相互独立的对象,因此它们无法互换。
String str = "Hello, World!"; int address = str.getAddress(); // This will return the memory address of the first reference to "str" String str2 = str; // Now str2 is pointing to the same string as str1 int value = str2.getBytes().length;
在这个例子中,首先我们创建了一个新的字符串变量
str
,然后将这个变量赋值给了一个已经存在的字符串变量str1
。由于这两个字符串都是同一个对象的不同引用,因此它们实际上是同一个字符串对象。之后我们通过获取字符串变量str
的地址并将其转换为字节数组来获取它的实际值。解决 无用评论 打赏 举报 编辑记录
悬赏问题
- ¥30 STM32 INMP441无法读取数据
- ¥100 求汇川机器人IRCB300控制器和示教器同版本升级固件文件升级包
- ¥15 用visualstudio2022创建vue项目后无法启动
- ¥15 x趋于0时tanx-sinx极限可以拆开算吗
- ¥500 把面具戴到人脸上,请大家贡献智慧
- ¥15 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。
- ¥15 各位 帮我看看如何写代码,打出来的图形要和如下图呈现的一样,急
- ¥30 c#打开word开启修订并实时显示批注
- ¥15 如何解决ldsc的这条报错/index error
- ¥15 VS2022+WDK驱动开发环境