对象变量的传递 再看

这篇博客探讨了Java中对象变量的传递机制。通过示例解释了当按照引用传递时,对象是否改变取决于是否创建了新对象。强调了String类的特性,指出其存储在数据区而不是堆区,并讨论了Java与C/C++中变量声明的差异。最后,通过例题展示了函数调用后的变量状态变化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、按照引用传递
在这里插入图片描述

在这里插入图片描述

2、例子

在这里插入图片描述

在这里插入图片描述

输出结果:
11
1964、7、22
1964、7、4

输出结果解释:

在这里插入图片描述

在这里插入图片描述

刚开始日期没有改变是因为创建了新的对象,所以是在新的对象上做出了改变,后来日期改了是因为没有创建新的对象,所以只能在原来的对象上进行改动。

所以,数据是否改变的原因也是与对象的创建与否有关。


3、例子

str="18th"
change(s);

public int change(String s)
{
    s="19th";
}

最终str的值是“18th”
在这里插入图片描述

可能是在s在赋值为19th的时候,s从指向18th的地方突然指向19th不懂,这是因为,19th实际上是一个新对象,有了一个新对象之后,s就指向了新对象了,所以str是不会改变的。

注意:
(1)数据的变化也与对象有几个有关,没创建对象的话,只能在原来的基础上进行改变,但是创建了对象之后,会指向新的对象,在新的对象的基础上进行改变。

(2)String类存的地方不是堆区,而是数据区

(3)这样的调用方式是正确的,因为,java中不是必须先声明后使用,与C语言和c++中不一样,只要有这个函数就可以


4、例题

public static void changeInt(Data t1,Data t2)
{
    t1.setT(2);
    Data t=t1;
    t1=t2;
    t2=t;
}

public static void main(String[] args)
{
    Data arg1=new Data(1);
    Data arg2=new Data(1);
    System.out.println(arg1.getT());
    System.out.println(arg2.getT());
}

在这里插入图片描述
之后是t1和t2交换,运行完changeInt函数之后,t1,t2,t出栈,只剩arg1和arg2。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值