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中,子类可以继承父类的所有的非private的,非静态的成员,那么父类的构造方法可以被继承吗?
- Java程序如何控制使只能启动一个程序(就是程序只能单开,不能像QQ那样可以同时挂好几个窗口)
- 使用htmlparser免费不?
- 如何改变RCP程序的外观-比如颜色
- 鄙视一下 中国缘
- 怎样理解2进制?
- 关于进度条的问题
- 各位兄台!怎样做一个可以拖来拖去的按钮?
- 我的JB4有许多控件不能用,有谁知道所有功能的注册码?
- jdk安装出现问题
- 求寻Linux下的JDK配置,谢谢
- 我已经编译了一个hello.class的文件,为什么,使用java hello还是提示没有hello.class这个类呢?
一个是关于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;
}
现在你再用这个方法就会起作用了