用赋值语句不会改变对象。
而字符串对象又是不能被修改的,可以用StringBuffer,不过不能用赋值语句修改,而是StringBuffer提供的方法。delete()
append()
来修改。

解决方案 »

  1.   

    String类是java中特殊的一个类
    当传递它的一个实例时,传递的是值,而不是引用用StringBuffer就行了
      

  2.   

    在java中像String这样的类,是没有办法改变其内容的,
    你在调用changeValue(myStr);后
    myStr和str指向同一个String实例,
    但是这个语句
      str="hello world";
    之后,实际上是str重新指向一个新的String实例,根本没有改变myStr所指向实例的内容。
      

  3.   

    String类是java中特殊的一个类
    当传递它的一个实例时,传递的是值,而不是引用---------------------------------------------java只有传值,没有传引用,不管是什么类型变量。
      

  4.   

    java只有传值,没有传引用,不管是什么类型变量。-----------------------------------------------
    当然有了
    当传递一个类对象时,传递的就是引用,指向同一地址
      

  5.   

    static String myStr="99";
    private void changeValue(){
      myStr="hello world";
    }
    changeValue();
    System.out.println("myStr="+myStr);
    如果你只是想单纯的调用一个函数后,把myStr的值改变,以上程序可以~~~
      

  6.   

    可以偷换概念嘛
    class MyString {
    private StringBuffer sb=;
    public MyString(String str) {
    this.sb=new StringBuffer(str);
    }
    public String changeValue(String newValue) {
    return newValue;
    }
    }
      

  7.   

    java只有传值,没有传引用,不管是什么类型变量。-----------------------------------------------
    当然有了
    当传递一个类对象时,传递的就是引用,指向同一地址===================================================这个问题讨论腻了,给你一个网站自己看吧http://www.javaranch.com/campfire/StoryPassBy.jsp如果你学过C++或者Delphi中的任何一种,应该很清楚。另外,传递String类型参数和传递其他自定义参数没什么区别,String的不同不表现在传参这儿。
      

  8.   

    变通一下思路,返回string不就行了。
     myStr = changeValue(myStr);
    不要一条道走到黑。
      

  9.   

    java跟C是不一样的,java里永远传的是值!!!我觉得这个说法完全正确.String 类一点都不特殊。你可以试试函数传递任何参数,如果在函数内部把该变量设为null,在外部访问该值,是null吗?肯定不是!这就不是传地址(引用)。
      

  10.   

    用replaceAll()不就可以了吗??
      

  11.   

    String myStr="99";
    String newStr=myStr.replaceAll("99","helloworld");
    System.out.println(newStr);好象没问题吧!
    哈哈
    我没试过
      

  12.   

    我弄弄.
    肯定是可以改变的.
    System.arraycopy就可以这么改变值!
      

  13.   

    如果String 传的是值那就没办法了.
      

  14.   

    同意henryqqq(天天郁闷) 的
    变通一下思路,返回string不就行了。
     myStr = changeValue(myStr);
    不要一条道走到黑。
      

  15.   

    java中的函数用
    1。当传递一个类对象时,传递的就是引用,指向同一地址
    2。String和其他基本传递的就是值楼主可以让函数返回一个String,或者使用StringBuffer对象
    另外:用赋值语句不会改变参数对象。
      

  16.   

    String是一个特殊的对象,在对String赋值时,系统会重新构造一个String对象。
    那么原先函数传递过去的引用指的地址和新产生的String的地址就不是同一个了,这样就导致了这样的现象。
    看似改变了myStr的指,其实在函数中是重新指向了一个地址。
    这是本人的个人见解。
      

  17.   

    堆里面一共就26个字母,这就是为什么字符串有.equals()属性而不能简单地用==判断两个字符串的值
      

  18.   

    其实任何类型的,到了内部实现,都是传递的值.说按引用传递,是面向CODER来说的,这样好理解.
    String是复合类型的,必然也是引用传递,只是它是不可更改的,所以你在方法内部更改了它的值只是说明让它重新引用了另外一个对象.
      

  19.   

    准确的说,java中一般类型参数是传值,而对象类型参数是传引用,但是引用本身是按值传递,所以使用参数无法改变String类型实参的值。
      

  20.   

    方法是对myStr的本地拷贝操作的
    不会改变myStr的值
      

  21.   

    class TestReferen 
    {
    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"; 
    }
    }
    并没有改变初始的值
      

  22.   

    touch25(期待2007) 
    不是说了,用赋值语句是改变不了的
    你把changeValue 改为:
    private static void changeValue(StringBuffer a)
    {
    a.delete(0,a.length());
    a.append("uuuuu");
    }
      

  23.   


    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不是给改变了吗。