public class ex { /**
 * @param args
 */
String str=new String("Hi!");
char[] ch={'l','i','k','e'};

public static void main(String[] args) {
// TODO Auto-generated method stub
ex ex_1=new ex();
ex_1.change(ex_1.str, ex_1.ch);
System.out.print(ex_1.str+" ");
System.out.print(ex_1.ch);
}
public void change(String str,char ch[])
{
str="How are you";
ch[1]='u';
}}
str的值怎么没有被修改啊  
结果为什么不是How are you luke

解决方案 »

  1.   

    String是final的,也就是说String的值是不可改变的!
      

  2.   

    String的特点:  String本身的值并没有改变 而是重新开辟了一块区域 又创建了一个新的对象来保存修改后的值
      

  3.   

    被final修饰的,一般是改不了的啊!!
      

  4.   

    public class ex { //String str=new String("Hi!");
    String str = "HI";
    char[] ch={'l','i','k','e'}; public static void main(String[] args) {
    ex ex_1=new ex();
    ex_1.change(ex_1.str, ex_1.ch);
    System.out.print(ex_1.str+" ");
    System.out.print(ex_1.ch);
    }

    public void change(String str,char ch[]){
    this.str="How are you";
    ch[1]='u';
    }}
      

  5.   

    charge()函数里的参数就是str,根本就没有把变量str传进来,加上this就可以了
      

  6.   

    添加了this:
    1、change方法里的str没有意义
    2、本程序整个没有意义  该程序的用意就是再测试 String的这个特点!
      

  7.   

    好像finally的类只是不能继承吧?没有说对象的值是不能改变的啊??String s = "":
    s = s + "hello";那么意思就是内存里面有2个String的对象,一个是""变成垃圾,一个是"hello"被s重新指向?
      

  8.   

    string的特点。是final类型的。
      

  9.   


    String是final型的,也就是说它在创建了之后里面的值是不会改变的,当你在对其进行操作时,内存会再重新分配内存来存放新生成的值,而原来内存中的值不变
    如果楼主想要得到想要的结果,建议使用StringBuffer
      

  10.   

    参数的传递有值传递和引用传递两种,基本类型是传值的,而对象是传引用的,但是String例外,String也是传值的。值传递不改变原来参数的值,只是传过去一个具体的值而已,而引用传递传过去的是地址,所以对引用的修改直接反映到所指向的具体的对象里面。
      

  11.   

    在JAVA语言中,所有的参数传递都采用值传递,即传递的是参数的副本,如果是引用型,引用不会被方法改变,但引用的对象内容可以被方法改变。