String 是定长字符串,一旦被付值后,长度将不能改变。而StringBuffer是变长字符串,所以长度可以改变。
那你一定不理解如下的:
String a="abcd";
a=a+"ef";
其实上面的在对a重新付值时,已经把a指向了a+"ef"所在的内存地址。而不是原来a 所在的地址了。
那你一定不理解如下的:
String a="abcd";
a=a+"ef";
其实上面的在对a重新付值时,已经把a指向了a+"ef"所在的内存地址。而不是原来a 所在的地址了。
一个是关于java的函数到底是传值还是传地址
一个是关于对象的
首先肯定的是:java是传值的,但你的这两个函数是传的两个对象,而对象是没有值 的,所以相当于传的是句柄,对于string对象来说,定义了之后,在内存中的值是不可以再改变的,一旦改变,就会新建一个string对象来容纳新的值,也就是产生了一个新的对象,而对于stringbuffer来说,本身是可以改变的,你执行了那步append的操作之后,那个对象本身的句柄并没有发生改变,所以在函数里面的变化就想当于在外面的操作,而string对象的那步操作,传进去的是一个对象,而 改变之后是另一个对象,那么函数体完成之后,能够 显示 出来的当然只是你开始的对象,改变之后的对象出来后是看不到 的
以上的解释应该满意了吧
但
text = text.replace ('j' , 'i'); 和text.replace ('j' , 'i');
却是不一样的
基本类型好像有8个:
int,boolean,byte,char,double,foat,long,String虽然是一个类,好像也是作为基本类型看的,其它的都是对象。
text = text.replace ('j' , 'i');
return text;
}
现在你再用这个方法就会起作用了