java中的按值传递图例讲解

java中的按值传递图例讲解
这几天论坛上有人在讨论java中按值传递的问题,说来说去,都不是十分完整和准确。
我想通过图片和例子更加有助于理解这个概念。
 
先看下面的例子:
public class TestSample{
       public static void link(int i){
              i=2;
       }
       public static void main(String[] args){
               int i = 1;
               link(i);
               System.out.println(i);
       }
}
 
在主函数中定义基本整型变量i,并赋予值1。把i做为参数传给方法link,在link中改变i的值为2。
但是在主函数中输出i时,i的值仍然为1。为什么会这样,这就是java的按值传递,别着急接着往下看。
 
在理解按值传递的概念时,是要区分几种情况的,论坛里的各位弟兄在讲的时候没有区分这些情况,造成十分混乱。
 
根据传递的参数,分成基本变量传参和引用变量传参。
 
先来看基本变量传参,也就是上面的例子。看下图:实箭头代表赋的初值,虚箭头代表改变后的值。
 
 
大家可以看到,main()和link()中的i是两个不同的变量,他们的相同点就是把值也就是1传了过来。
如果把link()中的i的值变成2,main()中的i的值是不会跟着变的。
再有就是link()中的i是局部变量,他的生命周期仅是在方法link中,运行完link后,这个变量i就失效,会被回收器回收。
 
再来看引用变量传参,这里面还要分成两种情况,一种是给形参赋予一个新的变量,看下面的例子,
public class TestSample{
       public static void link(Car i){
              i=new Track();
       }
       public static void main(String[] args){
               Car i = new Car();
               link(i);
               System.out.println(i);
       }
}
 
main()方法定义一个car型变量i,传到link()方法中,然后改变了i的值,返回main()后,输出i的值,他仍然是一个car,不会改变。
看下面的图:
 
 
方法link()中的变量i,一开始是引向car类型的一个实例的,后来使用i=new Track()语句,把i引向了另一个track型的对象实例。这个操作丝毫不会影响到main()方法中的i。
注意:并不只是使用new这个关键字才能使变量改变引用。
string是一个特例,比如,string s="hello";
s=s+" world";
新的s已经改变了他的引用对象,就象s=new String(s+" world");一样。
 
再看另一种情况,形参并不会改变引用对象,而是改变原来引用对象的值。看例子:
public class TestSample{
       public static void link(Car i){
              i.addABS();
       }
       public static void main(String[] args){
               Car i = new Car();
               link(i);
               System.out.println(i);
       }
}
main()方法定义一个car型变量i,传到link()方法中,然后对i进行addABS()方法的操作。返回到main(),再输出i,发现i已经变成了一个加装了ABS的car了。以上几种情况中,只有这种情况才能对实参进行修改。看下面的图:
 
 
无论是main()还是link()中的i,一直都是指向同一个实例,在link()中对此实例的任何修改,都会影响到实参i的值。
 
希望大家在传参的时候要分清情况,区别对待。
 
在 MATLAB ,可以使用图例标注来将不同的曲线或数据点与相应的变量值或标签对应起来,以便更好地理解和解释图形数据。下面是一种方法来实现图例标注与变量值的对应关系。 首先,假设我们有一个包含多个曲线或数据点的图形,并且希望将每个曲线或数据点与一个变量值对应起来。假设我们有一个变量x,它是一个长度为n的向量,表示各个曲线或数据点对应的变量值。 1. 创建一个图形或图表,并绘制所需的曲线或数据点。确保图形上显示了相应的标题、轴标签等。 2. 为每个曲线或数据点创建一个相应的图例标注,可以使用 "legend" 函数来实现。例如,对于第一个曲线或数据点,可以使用以下代码添加图例标注:“legend('标注1')”。这将在图形上添加一个图例,并将其标注为 "标注1"。 3. 使用 "legend" 函数的第二个输入参数来将图例标注与相应的变量值对应起来。例如,对于我们的变量 x,可以使用以下代码将第一个图例标注与 x(1) 对应起来:“legend('标注1', 'num2str(x(1))')”。这样,图例标注的 "num2str(x(1))" 将根据变量值动态地显示。 4. 重复步骤 2 和步骤 3,为每个曲线或数据点添加相应的图例标注,并将其与相应的变量值或标签对应起来。 通过以上步骤,我们就可以实现图例标注与变量值的对应关系。在图形,每个图例标注旁边将显示相应的变量值。这样,我们就可以在解读图形数据时更好地理解各个曲线或数据点所对应的具体变量值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值