用赋值语句不会改变对象。
而字符串对象又是不能被修改的,可以用StringBuffer,不过不能用赋值语句修改,而是StringBuffer提供的方法。delete()
append()
来修改。
而字符串对象又是不能被修改的,可以用StringBuffer,不过不能用赋值语句修改,而是StringBuffer提供的方法。delete()
append()
来修改。
调试欢乐多
当传递它的一个实例时,传递的是值,而不是引用用StringBuffer就行了
你在调用changeValue(myStr);后
myStr和str指向同一个String实例,
但是这个语句
str="hello world";
之后,实际上是str重新指向一个新的String实例,根本没有改变myStr所指向实例的内容。
当传递它的一个实例时,传递的是值,而不是引用---------------------------------------------java只有传值,没有传引用,不管是什么类型变量。
当然有了
当传递一个类对象时,传递的就是引用,指向同一地址
private void changeValue(){
myStr="hello world";
}
changeValue();
System.out.println("myStr="+myStr);
如果你只是想单纯的调用一个函数后,把myStr的值改变,以上程序可以~~~
class MyString {
private StringBuffer sb=;
public MyString(String str) {
this.sb=new StringBuffer(str);
}
public String changeValue(String newValue) {
return newValue;
}
}
当然有了
当传递一个类对象时,传递的就是引用,指向同一地址===================================================这个问题讨论腻了,给你一个网站自己看吧http://www.javaranch.com/campfire/StoryPassBy.jsp如果你学过C++或者Delphi中的任何一种,应该很清楚。另外,传递String类型参数和传递其他自定义参数没什么区别,String的不同不表现在传参这儿。
myStr = changeValue(myStr);
不要一条道走到黑。
String newStr=myStr.replaceAll("99","helloworld");
System.out.println(newStr);好象没问题吧!
哈哈
我没试过
肯定是可以改变的.
System.arraycopy就可以这么改变值!
变通一下思路,返回string不就行了。
myStr = changeValue(myStr);
不要一条道走到黑。
1。当传递一个类对象时,传递的就是引用,指向同一地址
2。String和其他基本传递的就是值楼主可以让函数返回一个String,或者使用StringBuffer对象
另外:用赋值语句不会改变参数对象。
那么原先函数传递过去的引用指的地址和新产生的String的地址就不是同一个了,这样就导致了这样的现象。
看似改变了myStr的指,其实在函数中是重新指向了一个地址。
这是本人的个人见解。
String是复合类型的,必然也是引用传递,只是它是不可更改的,所以你在方法内部更改了它的值只是说明让它重新引用了另外一个对象.
不会改变myStr的值
{
public static void main(String[] args)
{
System.out.println("Hello World!");
StringBuffer sb = new StringBuffer("ddd");
changeValue(sb);
System.out.println(sb);
String aa = "dd23ewed";
changeValue(aa);
System.out.println(aa);
}
private static void changeValue(StringBuffer a)
{
a = new StringBuffer("uuuuu");
}
private static void changeValue(String a)
{
a = "ddddsdfasd";
}
}
并没有改变初始的值
不是说了,用赋值语句是改变不了的
你把changeValue 改为:
private static void changeValue(StringBuffer a)
{
a.delete(0,a.length());
a.append("uuuuu");
}
public class money
{
static void myAppend(StringBuffer sb,String str)
{
sb.append(str); }
public static void main(String[] args)
{
StringBuffer sb1=new StringBuffer("Hello");
System.out.println("Before called:");
System.out.println("sb1="+sb1);
myAppend(sb1," Java!");
System.out.println("After called:");
System.out.println("sb1="+sb1);
}
}
-----------------------------------------
结果:
Before called:
sb1=Hello
After called:
sb1=Hello Java!
----------------------------
这里传递的sb1不是给改变了吗。