String对象与内存控制_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > String对象与内存控制

String对象与内存控制

 2015/1/28 13:43:42  w62268458  程序员俱乐部  我要评论(0)
  • 摘要:1.编译期和运行期的区别/***编译时,和运行时的不同*直接量是在编译就分配内存,而引用变量和方法调用创建的运行时才分配内存*@authorAdministrator**/publicclassStringJoinTest{publicstaticvoidmain(String[]args){Stringstr1="hello的长度为:5";Stringstr2="hello的长度为:"+"hello".length();intlen=5;Stringstr3="hello的长度为:"+len
  • 标签:内存

1.编译期和运行期的区别

?

class="java" name="code">/**
 * 编译时,和运行时的不同
 * 直接量是在编译就分配内存,而引用变量和方法调用创建的运行时才分配内存
 * @author Administrator
 *
 */
public class StringJoinTest {
	public static void main(String[] args) {
		String str1 = "hello的长度为:5";
		String str2 = "hello的长度为:" + "hello".length();
		int len = 5;
		String str3 = "hello的长度为:" + len;
		
		System.out.println("str1 == str2 : " + (str1 == str2));
		System.out.println("str1 == str3 : " + (str1 == str3));
		System.out.println("str3 == str3 : " + (str3 == str2));
	}
}

?输出结果:str1 == str2 : false
????????????????? str1 == str3 : false
????????????????? str3 == str3 : false

?

解释:== 判断的是对象在内存中位置是否相同,而equals判断的是存储内容是否相同。

2.String和StringBuilder的区别

??? 1)String代码

?

public class ImmutableString {
	public static void main(String[] args) {
		String str = "hello";
		System.out.println(System.identityHashCode(str));
		str = str + "java";
		System.out.println(System.identityHashCode(str));
		str = str + ", 111";
		System.out.println(System.identityHashCode(str));
	}
}

??? 结果:18306082
?????????????? 9740137
?????????????? 23965177
?? 解释:结果可看出str引用变量指向的内存是不同的,所以说String是不可变类,当使用String来拼接字符串时会造成内存溢出等问题。

??? 2)StringBuilder

?

?

public class MutableString {
	public static void main(String[] args) {
		StringBuilder str = new StringBuilder("hello ");
		System.out.println(str + " : " + System.identityHashCode(str));
		str.append("java ");
		System.out.println(str + " : " + System.identityHashCode(str));
		str.append(",111");
		System.out.println(str + " : " + System.identityHashCode(str));
	}
}	
	

??? 结果:hello? : 18306082
????????????? hello java? : 18306082
????????????? hello java ,111 : 18306082

??? 解释:StringBuilder操作字符串时引用变量指向的内存是相同的。此外StringBuilder是非线程安全的,而StringBuffer是线程安全的,所以StringBuilder的效率会比StringBuffer的高

?

发表评论
用户名: 匿名