导航:首页 > 编程语言 > java字符串内存

java字符串内存

发布时间:2022-12-16 06:09:53

java中两个字符串的内存地址相同

String s1 = new String("I am a student"); 这里 你声明了一个引用 s1\x0d\x0a指向的是 new String("I am a student"); 这个字符串\x0d\x0aString s4 = s1; 这里 你又声明一个引用 指向s1的引用 也就是new String("I am a student"); \x0d\x0aif(s1 == s4) {\x0d\x0aSystem.out.println("这两个字符串的内存位置相同");\x0d\x0a}\x0d\x0a上面还是相等的\x0d\x0a但是 s4 = s4.replace('a', 'A');\x0d\x0as4.replace('a', 'A'); 生成了另一个 字符串 你要知道 String 是final类型的 所以\x0d\x0a这个时候 即原来已经开辟了内存空间的 new String("I am a student"); 是不可能改变内容了的\x0d\x0a这个时候 s4.replace('a', 'A'); 就另开辟了一个内存空间\x0d\x0a 而这个时候 你的S4指向s4.replace('a', 'A'); 而原来的s1还是指向 new String("I am a student"); \x0d\x0a他们肯定不一样的呢

⑵ java中,字符串,如何存储在内存中的哪个区域

字符串在java中是不可变序列,每一个双引号的字符串序列都是常量,存在常量池中。但String类型的对象,属于对象范畴,按对象的特性存储。

⑶ java的字符串是常量吗它存 放在内存的哪里

b为字符串常量,存放在java虚拟机为它分配的内存在常量池中。
如果常量池中存在“你好”,b就会指向其内存地址。
如果不存在Java虚拟机会为“你好”分配一个地址

⑷ java中字符串池存放在内存的哪个区域

字符串首先是一个对象。
举个例子:
String
str0
=
"abc";
String
str1
=
new
String("abc");
当执行String
str0
=”abc”;时,JVM会在栈中创建三个char型的值
’a’
,
’b’

’c’
,然后在堆中创建一个String对象,它的值(value)是刚才在栈中创建的三个char型值组成的数组{
’a’
,
’b’
,
’c’
},最后这个新创建的String对象的值”abc”会被添加到字符串池中。如果我们接着执行String
str1=new
String(”abc”);代码,由于”abc”已经被创建并保存于字符串池中,因此JVM只会在堆中新创建一个String对象,但是它的值(value)是共享前一行代码执行时在字符串池中的

abc

;

⑸ Java中 String字符串内存分配问题

jvm中有个String pool,一般在池中有的对象就不会再去生成一个新的。
String s1 = "abc";
生成了一个字符串对象"abc"并放入pool中,定义了一个String变量s1并指向"abc"。
String s = "abc" + s1 + "def";
等式右边有三个String 对象 "abc" 、s1 、"def"

这里("abc"==s1)是true,就是说是引用的同一个内存地址。
"abc"已经在池中了,直接从池中取出来,这句又创建了一个"def"的String对象并放入池中。
当前二个String对象做连接的时候,又会创建一个新的String对象"abcabc",并放入池中;然后再做字符串相加"abcabc"+def又生成一个字串对象,最后变量s指向这个新的String对象。

所以用+来连接字串会产生很多临时的字串对象,效率低。一般使用StringBuffer或StringBuilder来做字串连接。
可以使用new String()来生成一个新的String对象并单独分配内存空间。

------------------------------------------------------
查了下资料,已经改了回答内容。

String s = "abc";
这句是定义一个String变量s,jvm会先去字符串池中找有没有"abc",有的话就把s指向"abc",没有就会先在池中创建一个,再让s指向"abc"。
String s = new String("abc");
这句是先定义一个String变量s,然后在内存中分配新的空间"abc"再让s指向这个内存地址。

⑹ 怎么查看java中字符串的内存地址

java中不建议直接获取字符串内存地址,因为java不像c语言,获取内存地址是C语言的强项,java的弱项。但是java内存地址还是有一个应用场景,就是判断两个字符串内存地址是否相等来判断是否是同一个对象,用双等号“==”来比较的。参考代码如下:


publicclassTest01{

/**
*@paramargs
*/
publicstaticvoidmain(String[]args){
//TODOAuto-generatedmethodstub
Stringstr1="abc";
Stringstr2=newString("abc");
System.out.println(str1==str2);//输出false
}

}

⑺ java的字符串是常量吗它存 放在内存的哪里

你好,String变量中存的是地址。在你的例子中,变量b存储的是一个"你好"的字符串常量的地址,这个地址是不变的,若你再声明String c=”你好";则c==b,同样,b==“你好";因为常量在内存中只存储一次。而你的变量a使用了new运算符,它的意思显而易见,就是重新申请一个空间来存放字符串的。所以当你再有String d=new String("你好");变量(d==a)的返回值是false。
希望这样解释能理解吧

⑻ Java中字符串在内存当中占几个字节

对是10字节
在C 或C++个 一个char 是8位(1BYTE)而java 中是16位 (2BYTE)
这个字符串为5个char 所以是 10(BYTE)

⑼ java中,如何得到一个字符串占内存大小

java中可以用.getBytes().length获取字符串占用内容的大小,原理是java中任何字符都采用Unicode编码,所以衡量占用内存大小采用占用的字节数。
举例如下:
public class TestStringSize {
public static final void main(String[] args) {
System.out.println("占用内存大小:"+"学java".getBytes().length);
}
}
输出结果:
占用内存大小:6 byte

⑽ Java中字符串在内存当中占几个字节

对是10字节
在C
或C++个
一个char
是8位(1BYTE)而java
中是16位
(2BYTE)
这个字符串为5个char
所以是
10(BYTE)

阅读全文

与java字符串内存相关的资料

热点内容
dvd光盘存储汉子算法 浏览:758
苹果邮件无法连接服务器地址 浏览:963
phpffmpeg转码 浏览:672
长沙好玩的解压项目 浏览:145
专属学情分析报告是什么app 浏览:564
php工程部署 浏览:833
android全屏透明 浏览:737
阿里云服务器已开通怎么办 浏览:803
光遇为什么登录时服务器已满 浏览:302
PDF分析 浏览:486
h3c光纤全工半全工设置命令 浏览:143
公司法pdf下载 浏览:383
linuxmarkdown 浏览:350
华为手机怎么多选文件夹 浏览:683
如何取消命令方块指令 浏览:350
风翼app为什么进不去了 浏览:779
im4java压缩图片 浏览:362
数据查询网站源码 浏览:151
伊克塞尔文档怎么进行加密 浏览:893
app转账是什么 浏览:163