我阅读了很多文章,并且都说Java是值得传递的.但我仍然没有解释传递值和参考值之间的区别.我写了一个示例程序,它像这样执行..
public class PassByValue {
private int a;
private int b;
public PassByValue(int a, int b) {
this.a = a;
this.b = b;
}
public static int mul(int a, int b) {
int z = a * b;
System.out.println("The Value of Z inside mul: " + z);
return z;
}
public static void main(String args[]) {
int z = 100;
int x = 40;
int y = 20;
mul(x,y);
PassByValue pass = new PassByValue(x,y);
mul(pass.a,pass.b);
System.out.println("The Value of Z" + z);
}
}
Run Code Online (Sandbox Code Playgroud)
执行
800
800 and
100
Run Code Online (Sandbox Code Playgroud)
谁能解释我这些问题......
答:它只是将存储在变量中的数字或值传递给函数.我是对还是错.
aio*_*obe 18
混淆可能是因为变量首先不能包含对象.变量只能包含对象的引用.(换句话说,根本不传递对象,不是通过引用传递,而不是通过值传递.)
一旦你意识到这一点,很明显Java中没有任何传递引用.引用对象的变量存储引用,此引用按值传递.
1.什么是通过价值意味着......
答:它只是将存储在变量中的数字或值传递给函数.我是对还是错.
那就对了.传递变量中包含的值,而不是变量本身.
1. How do you say Java是通过价值?
Java是按值传递的,因为原语是按值传递的,引用是按值传递的.(对象永远不会传递.)
例如,您无法swap在Java中实现方法.即,你做不到
String str1 = "hello";
String str2 = "world";
swap(str1, str2);
// str1 can't refer to anything but "hello"
// str2 can't refer to anything but "world"
Run Code Online (Sandbox Code Playgroud)
2.为什么Java是按值传递而不是通过引用?
如上所述,甚至引用都是按值传递的.
hvg*_*des 13
你的答案是正确的,但你缺乏细节.如果你这样做
Dog d = new Dog()
d是对Dog实例的引用,即值传递的意思是您在传入d方法时
walkDog(d);
将引用的副本(即引用的值,而不是引用本身)传递给方法.因此,您有两个对Dog的实例的引用,一个在调用范围中,一个在被调用范围内.让我们说在walkDog方法中有一条线
d = new Dog();
该方法中的d参考仅指向新狗.首次调用该方法的原始引用仍然指向originalDog.如果Java通过引用传递,则在方法中将使用相同的引用而不是引用的副本,因此更改引用的值将影响调用和调用范围中的引用.
编辑 - 根据你的评论,我想明确的事情.由于原始范围中的引用和方法范围都指向同一个对象,因此您仍然可以在两个范围内更改该对象上的内容.所以,如果你这样做
d.drinkWater();
在该walkDog方法中,并drinkWater更改了dog对象上的一些变量,然后由于两个引用都指向同一个对象,该对象已被更改.
它只是区分每个范围内的引用实际内容.但它确实出现了很多.
| 归档时间: |
|
| 查看次数: |
6059 次 |
| 最近记录: |