您的位置:首页 > 其它

String 两种定义方法的区别

2016-09-02 09:24 176 查看
String s2=new String("123");

//编译时先去字符串常量池检查,是否存"123",如果不存在,则在常量池中开辟内存空间存放"123";如果存在,则不用重新开辟空间。然后在堆中开辟空间存放new出来的String实例,在栈中开辟空间命名s1,存放堆中String的内存地址,这个过程中将引用s2指向new出来的String实例

String s1="123";

//先去字符串常量池检查,是否存在“123”,如果不存在,在常量池开辟内存空间存放“123”,如果存在,在栈中开辟空间,命名s1,存放常量池中的“123”内存地址

代码如下:

package com.tjove.main;

public class StringDemo {

public static void main(String[] args) {
StringDemo demo=new StringDemo();
demo.practice();

}
void practice(){
String s1="123";
String s2="123";//s1,s2指向常量池中的同一个地址
String s3=new String("123");//s3指向堆内存中地址
String s4=new String("123");//s4指向堆内存中另一个地址,常量池中自始至终只有一个"123"

System.out.println("s1==s2:"+(s1==s2));
System.out.println("s1==s3:"+(s1==s3));
System.out.println("s1==s4:"+(s1==s4));
System.out.println("s3==s4:"+(s3==s4));
}

}
结果如下:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: