类型:转载 责任编辑:asp.net 日期:2007/05/23
热门软件下载:
请看代码:
class test
{
public static void main(String args[])
{
String str = new String();
StringBuffer sb = new StringBuffer();
Function(sb);
Function(str);
}
private static int StringToUnicode(StringBuffer strDst)
{
strDst.append("hello world");
return strDst.length() / 2;
}
private static int StringToUnicode(String strDst)
{
strDst.concat("hello world");
return strDst.length() / 2;
}
}
为什么main函数中:sb能够被改变,而str不能被改变呢??java传递的不是引用吗?为什么不能改变实参的值呢??初学java请大家多指点谢谢!!
网友回答:
String是final类。。。String对象是不可以改变的!
String类是不可变对象,一个String对象在创建时状态就固定下来,以后是无法改变的。而StringBuffer是可变对象,对象被创建后,可以通过append等方法加以改变。
在java中可变对象、不可变对象是非常重要的概念。
你的Fcution没有定义A!
,这个程序好像不能运行吧!
To:lovelymaomao(小老鼠)
固然String是不可变的,但不能通过String类是final class来推导。
To 楼主:
因为String是不可变的,它的操作将产生一个新的对象,因此以上函数,得不到你预期的效果,可以改成以下代码
strDst = strDst.concat("hello world");
return strDst.length() / 2;
http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html
诸位楼上说的都没错,补充一点。
对于频繁做字符窜变更时,要尽量使用StringBuffer,如程序中拼SQL文,电文解码等。
因为String 对象不可变,每次赋新值仍然是那个对象。
String a = "1";a = "2"; a = "3" -------对象不变
若要生成新对象就必须new, a = new String("4");------新对象,原来的成了垃圾