标题: String小问题 [打印本页] 作者: 黑马张扬 时间: 2012-5-28 00:26 标题: String小问题 class StringDemo
{
public static void main(String[] args)
{
String x = "a";
String y = "a";
String m = new String("a");
String n = new String("a");
首先"=="和equals()方法不同的是,"=="是用来比较两个的地址值是否相同的,而equals()是用来比较两个对象的内容是否相同的,
明显, String m = new String("a");和 String n = new String("a");是两个对象了,所以返回的false,如果用equals()那就是true。
而x = "a";y = "a";指向的都是同一个对象那就是"a"因为字符串池中只有一个"a"字符串所以是true。
jxj4227982333 发表于 2012-5-28 00:58
String x = "a";
String y = "a";
String m = new Strin ...
昨天刚刚看到equals() ,对象的概念还是不懂作者: 丁桂松 时间: 2012-5-28 16:20
String x = "a";
String y = "a";
创建的对象是在字符串常量池中,常量池中若字符串已有了,就不会再创建新的字符串
String m = new String("a");
String n = new String("a");
通过new关键字在堆内存中,开辟了2个不同的对象,不同的内存空间,不同的地址作者: 曹晓涵 时间: 2012-5-28 18:10
1、字符串对象的创建:String x = "a"。
由于字符串对象的大量使用,Java中为了节省内存空间和运行时间,在编译阶段就把所有的字符串文字放到一个文字池中,而运行时文字池成为常量池的一部分。文字池的好处是该池中 所有相同的字符串常量被合并,只占用一个空间。
对两个引用变量,使用“==”判断它们的值是否相等,即是否指向同一个对象。
String x = "a";
String y = "a";
System.out.println(x==y); //输出必然为TRUE
输出显示为TURE是因为,两个字符串文字保存为一个对象。
就是说,上面的代码只在文件池pool中创建了一个String 对象。
2、字符串对象的创建:String m = new String("a")
这里“a”本身就是文件池pool中的一个对象,而在运行时执行new String()时,将文件池pool中的对象复制一份到堆heap中,并把heap中的这个对象的引用交给s持有。
String m = new String("a")这条语句就创建了2个String对象。
String m = new String("a");
String n = new String("a");
System.out.println(m==n);
这时候用”==“判断就可知,虽然两个对象的”内容“相同,但两个引用变量所持有的引用不同。
上面的代码创建了3个字符串对象String Object,文件池pool中一个存有字符串”a“,heap中两个m和n。