Java赋值和参数传递

程序中的赋值和参数传递,一种比较普遍的说法是包括2种类型:passing by value 和 passing by reference。其实个人觉得不必太纠结这个概念, 对于Java来说,是没有passing by reference的说法的。可以将其看做是 原生数据类型(Primitive) 的传递和 引用数据类型(Object) 传递,而无论传递原生数据类型还是引用类型,统一都是 传值 。原生数据类型的传递是将堆栈里面的值直接复制一份传递,引用类型是将堆栈中对象引用的地址值复制一份传递。

举个例子来看

public class ParamTest1
{
        public static void main (String[] args)
        {
           C c = new C();
           int a =1;
           c.changeInt(a);
           System.out.println(a);
            }
}

class C
{
           void changInt(int a)
{
           a++;
}
}

输出是1

因为原生数据传递,不是引用传递,跟地址无关,我只是把自己的值传给了你,但是传完以后就完了,你是你,我是我,你要怎么变都可以,但是跟我无关,所以我的值还是原来的值。说白了,其实就是原生数据并不是指向型的,直接在栈空间里面赋值,对自身也没有任何影响。别的数据尽管改变,但是并不会影响自己的数据。

public class ParamTest2
{
           public void changePoint(Point point)
             {
                 point.x=3;
                 point.y=4;
                 }
           public static void main(String[] args)
             {
                 ParamTest2 pt=new ParamTest2();
                 Ponit point= new Point();
                 
                 pt.changePoint(point);
                 
                 System.out.println(point.x,point.y);  
                }
   }
class Point
{
  int x;
  int y;
  }

输出结果为 3,4

如果在changePoint里面第一行加一句 point=new Point();

那么输出的结果就变成了0,0

对象引用传递其实也是传值,只不过传递的是地址的值,因为引用具有指向性,所以2个引用存储的地址值一样的话就会指向同一个对象,任何一个改变其中的值,另一个会受到影响。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值