String引用类型作为形参为什么不会改变(从表面理解,

 

目录

综上所述Java是值传递。


public class Test  {
   public static void main(String[] args) {
    String s="1";   Hero h = new Hero("臭阿库娅",999);
    char ch[]={'1','3'};System.out.println(s+" "+ch[1]);      System.out.println(h.toString());
    test(s,ch,h);
      System.out.println(s+" "+ch[1]);
      System.out.println(h.toString());
      System.out.println(h.name);
      System.out.println("结论:在方法里,引用类型改变指向的地址不会生效," +
              "即引用类型形参只能改变值,不能改变指向,要改变指向就Return(深刻体现了return对引用类型的作用"); }
   public static void test(String s,char ch[],Hero h){
      s="g";
      ch[1]='2';
      h.name="wo";//未赋值新对象时改变前有效
      h =new Hero("幼糖",998);
      h.name="ni";
   }

}class Hero{
 String name;
 int hp;

   public Hero(String name, int hp) {
      this.name = name;
      this.hp = hp;
   }

   @Override
   public String toString() {
      return "\'Hero\':{" + "\'name\':\'" + name + '\'' + "," + "\'hp\':" + hp + '}';
   }
}

 

换一种理解:

引用类型只能通过地址来达到改变值,而不能直接改变.

比如:

       String q="123";//String q =new String ("123")
       String q2 = q;
       System.out.println("q:"+q);
       System.out.println("q2:"+q);
       q2="12334";
       System.out.println("q:"+q);
       System.out.println("q2:"+q);
        q="12";
        System.out.println(q2);
         System.out.println(q);

 

综上所述Java是值传递。

值传递(pass by value)是指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数。

引用传递(pass by reference)是指在调用函数时将实际参数的地址直接传递到函数中,那么在函数中对参数所进行的修改,将影响到实际参数。

Java中的传递,是值传递,而这个值,实际上是对象的引用?!  多理解一下是多个指针指向同一个地址,而改变是不是直接改变地址而是在一个新的地址中,

 Test test = new Test();
        test.a=2;

        Test test2 = test;
        test2 = new Test();
        test2.a =3 ;
        System.out.println(test.a +" "+test2.a);//2 3

个人理解:

即hollis作为形参时,user只是获得了它得值引用,指向同一块地址,当user改变指向(new)时,改变的只是user自己的,而没该改变hollis,如果是引用传递则hollis也会跟着改变指向。

为什么对象中的参数会改变,因为获得了值引用,能改变其内部值(毕竟指向地址一样,改变地址里的东西则都会改变,而改变地址其实只是改变指向,就无法影响原来的对象)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值