Java中String的交换及作为参数时的传参机制问题

package string_;

public class String01 {
    public static void main(String[] args) {
        String str1 = "hello";
        String str2 = str1;
        System.out.println(str1);// "hello"
        System.out.println(str2);// "hello"
        str2 = "good";
        System.out.println(str1);//str1未变化
        System.out.println(str2);//str2变成"good"

        A a = new A("ya", "bye");
        System.out.println("-------");
        System.out.println(a.str1);// "ya"
        System.out.println(a.str2);// "bye"
        a.exchange1(a.str1, a.str2);
        //并未变化,传参机制,传过去的是a.str1和a.str2引用的字符串的引用
        System.out.println(a.str1);// "ya"
        System.out.println(a.str2);// "bye"

        A a2 = new A("see", "you");
        System.out.println("-------");
        System.out.println(a2.str1);// "see"
        System.out.println(a2.str2);// "you"
        a2.exchange2();
        //发生变化,说明对于对象的String成员变量,可以在该对象的方法内部修改
        System.out.println(a2.str1);// "you"
        System.out.println(a2.str2);// "see"

        A a3 = new A("big", "apple");
        System.out.println("-------");
        System.out.println(a3.str1);// "big"
        System.out.println(a3.str2);// "apple"
        String temp = a3.str1;
        a3.str1 = a3.str2;
        a3.str2 = temp;
        //发生变化,说明在外部,对于对象的String成员变量通过对象引用.成员变量可以更改
        System.out.println(a3.str1);// "apple"
        System.out.println(a3.str2);// "big"

    }
}
class A {
    String str1;
    String str2;

    public A(String str1, String str2) {
        this.str1 = str1;
        this.str2 = str2;
    }

    public void exchange1(String stra, String strb) {
        String temp = stra;
        stra = strb;
        strb = temp;
    }
    public void exchange2() {
        String temp = str1;
        str1 = str2;
        str2 = temp;
    }
}

看看下面的两份代码



public class Test1 {
	String str = new String("hsp");
	final char[] ch = {'j', 'a', 'v', 'a'};
	public void change(String str, char ch[]){
		str = "java";
		ch[0] = 'h';
	}
	public static void main(String[] args){
		Test1 ex = new Test1();
		ex.change(ex.str, ex.ch);
		System.out.print(ex.str + " and ");
		System.out.println(ex.ch);
		//ex的str未变化,ch[0]变化了,输出结果应该如下
		//hsp and hava
	}
}


public class Test2 {
	String str = new String("hsp");
	final char[] ch = {'0', '0', '0', '0'};
	public void change(Test2 ex1){
		//main方法中的ex.str跟ex.ch[0]也会变化
		ex1.str = "java";
		ex1.ch[0] = 'p';
		
		
		Test2 ex2 = new Test2();
		ex2.str = "c++";
		ex2.ch[0] = '2';
		//ex1变了,ex却没变,但是ex2变化了
		ex1 = ex2;//这行省略了的话main方法中的ex也会变化
		ex1.str = "php";
		ex1.ch[0] = '1';
		
		System.out.print("ex1.str=" + ex1.str + " ex1.ch=");
		System.out.println(ex1.ch);
		System.out.print("ex2.str=" + ex2.str + " ex2.ch=");
		System.out.println(ex2.ch);
	}
	public static void main(String[] args){
		Test2 ex = new Test2();
		ex.change(ex);
		System.out.print("ex.str=" + ex.str + " ex.ch=");
		System.out.println(ex.ch);

	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值