String
内存
栈 stack
存放基本数据类型和数据,但对象本身不存放栈中。
n=5,如果栈中已经存在一个数值5,讲不再开辟一个新的空间。
栈中的内容,如果存在直接使用,如果不存在则重新开辟空间,存储
值类型,在方法内部改变,方法外部不会改变。
堆 heap
存放的是new产生的数据。(数组、对象)
字符池
1. String s1="wuyu"; //在字符串中创建一个对象 //字符串wuyu String s2="wuyu";
System.out.println(s1==s2);//true System.out.println(s1.equails(s2));//true
2. 保存字符串对象,可以被共享使用,提高了效率 存放方法区,
`String s3="wuyu"; //堆
String s4=new String("wuyu");//栈
System.out.ptintln(s3==s4)//false
//栈区地址和堆区地址不一样
System.out.ptintln(s3.equails(s4))//true
`
3. //常量的值在编译的时候就被确定(优化)了
String str1="wu"+"yu"; //创建一个对象
String str2="wuyu";
str1==str2? //true
4. 字符串: //在第三行(str1+str2)会在堆中创建一个StringBuilder的类 //同时str2指向StringBuilde对象完成初始化, //然后调用append方法完成str4的字符串合并 //然后调用StringBuilde的toString();放回一个字符串对象。 //str5存储的地址还是在字符池中 //所以str4==str5是不相等的
//拼接的字符串存储在堆中
String str1="wu";
String str2="yu";
String str3=str1+str2;
String str4="wuyu";
str3==str4? //false
5. false 同上
6.
输出:abc
String 特殊的引用类型
7. String str1="abc"; String str2=new String("new"); str1==str2 //true
常量池
静态域(方法区/静态区)
寄存器
代码段
数据段
值类型
引用类型
引用类型:数组、对象