Posted on 2011-05-03 16:44
哈希 阅读(271)
评论(0) 编辑 收藏 所属分类:
java 代码
public class StringBufferTest
{
public void operater(StringBuffer x,StringBuffer y)
{
//string.append(String)字符串添加函数
x.append(y);
y=x;
System.out.println("operater输出:"+"a="+x+",b="+y);
}
public static void main(String [] args)
{
StringBuffer a=new StringBuffer("A");
StringBuffer b=new StringBuffer("B");
StringBufferTest test=new StringBufferTest();
test.operater(a, b);
System.out.println("main输出:a="+a + ",b=" +b);
}
java的引用类型是地址传递,可是在operater中和main中输出结果为什么不一样呢?
在main中
a => new StringBuffer("A");
b => new StringBuffer("B");
在test.operater(a, b);这句,传入的是两个引用
在operater方法中,b被重新赋值了,即引用地址改变了
================
补充一下:java中任何一个对象变量只是指向创建的对象的一个引用
例如 String a = "KKK"; 那么 “KKK”是创建的String对象, a 则是这个对象的引用,或者说a保存对象“KKK”在内存中的地址
“==”与“Equals”区别
==操作比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的地址是否相同,即栈中的内容是否相同。
equals操作表示的两个变量是否是对同一个对象的引用,即堆中的内容是否相同。
==比较的是2个对象的地址,而equals比较的是2个对象的内容。
显然,当equals为true时,==不一定为true;