String 用于表示字符串,生成的时候有两种方式:
1 .用双引号 String str1="god" ;
此方法生成的字符串,引用地址指向,,先去字符串常量池中寻找是否有此字符串,若是有,则直接拿来引用,反之,存储此字符串在字符串常量池中。
2.用String类的构造函数String str2=new String("god");
此方法生成的字符串,引用地址指向,,先去字符串常量池中寻找是否有此字符串,若是有,则在字符串常量池中复制一个到堆(heap)中,则此方法生成的字符串生成一个对象,若是没有,就在字符串常量池和堆中创建此对象,而不是在堆中创建此对象复制到字符串常量池中,则此方法生成的字符串生成两个对象。
同一个字符串反复出现,如何节省内存空间的问题:
1.7环境
注: ==比较的是变量(栈)内存中存放的对象的内存地址,则比较的是 是否为相同对象;equal比较的是值是否相等
当多次new一个相同的字符串的时候,(new String都是在堆上创建字符串对象),可以用String的intern()方法,str2.intern();调用intern(),编译器会将字符串(1.7后则是将在堆上的地址引用复制到常量池)添加到常量池中,并返回指向该。因常量池中不会出现两个相同的字符串,所以下次调用intern()的时候,直接返回。
则:
//第一行
String a="happy";
//第二行
String b=new String("happy");
a==b//返回 false
a==b.intern() //返回 false
//第一行
String b=new String("happy");
//第二行
String a="happy";
str1==str2 //返回 false
str1==str2.intern() //返回 true
网友评论