在java中 变量之间是如何赋值的

鉴于有些人不理解“引用”这个词语,现将“引用”用“变量”这个词替换。

-------------------------------------------------------------------------------------

Java中变量之间是如何赋值的, 在java 中变量a 赋值给变量b,然后改变变量a的值,b也会发生改变吗?带着这个问题,我们来做几个实验。

一、基本类型数据赋值

实验1 :定义一个int 类型变量a = 3,并将a 赋值给int  b,然后将a ,赋值为5,那么b 的值是3 还是5 呢?

int a = 3;
int b = a ;
a = 5 ;
System.out.println(" a = " + a+" b = "+b );

运行程序 ,打印结果为 :
 a = 5 b =3

  我们看到,b并没有随a的改变而改变。基本数据类型是值赋值。

二、String类型数据赋值

实验2:定义一个String类型变量s1 赋值为“a”,并将s1赋值给String s2 ;然后将s1赋值为“b”,那么s2的值是 “a”还是 “b”?
String  s1 = "a" ;
String s2 = s1;
s1 = "b" ;
System.out.println("s1 = "+s1+" s2 = "+ s2);

运行程序 ,打印结果为 :

 s1 = b  s2 =a

   我们看到,s2并没有随s1的改变而改变。

三、自定义数据类型赋值

实验3:  创建一个TUser u1  ,并将u1赋值给TUser u2 ,将 u1重新赋值 ,u2会随着u1改变而改变吗 ?

TUser u1 = new TUser();
u1.setId(1);
TUser u2 = u1 ;
u1 = new TUser();
u1.setId(2);
System.out.println("ui :"+u1 + "\t\n" +"u2 : "+ u2);

运行程序,打印结果为:
u1 :TUser(id=2)
u2 : TUser(id=1)

我们看到u2并没有随着u1的改变而改变。
如果我们不改变u1指向的地址,而是改变u1指向地址所对应的数据(即将 u1 = new TUser(); 注释掉)。那么u1,u2 打印的记过将都会是 TUser(id=2)

通过以上三个实验我们发现:
变量之间的赋值,可以说没有所谓的值赋值和地址赋值。
简而言之,将一个变量a赋值给另一个变量b,是将这个变量a的值,拷贝一份给变量b(如果a是引用类型,就拷贝引用,如果是基本类型,就拷贝原始值)

四、关于值传递和引用传递的理解

        所谓的值传递和引用传递的定义:实参给形参赋值的的时候,传递的是值还是引用(地址?)。这个概念似乎还是不能很好的理解。
     值传递和引用传递全称应该是:原始类型作为参数,传递的是原始值,引用类型作为参数传递的是引用
     值传递和引用传递的本质区别:值传递,拷贝变量的值,并将它传递给形参;引用传递,拷贝引用,将引用作为参数传递。











  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值