Java 如果没有原始类对象,一个类如何更改另一个类值

Java 如果没有原始类对象,一个类如何更改另一个类值,java,class,Java,Class,请原谅,我正在努力理解这个概念,不想在不知道发生了什么的情况下接受它。 我从下面的代码中了解到,只有类X的对象可以修改自己,类 事实上,ModifyX可以通过调用setNum方法来更改X.X.num 我的问题是: 为什么[ModifyXobject“mx”]能够从X中更改[Xobject“X”]的值 作为参数传递的y的值在X中更改,但为什么在main(String[]args)中不更改呢 这种方法 s.setNum(y); num.setNum(5); 获取值y的副本并将其传递给方法。Jav

请原谅,我正在努力理解这个概念,不想在不知道发生了什么的情况下接受它。 我从下面的代码中了解到,只有类X的对象可以修改自己,类 事实上,ModifyX可以通过调用setNum方法来更改X.X.num

我的问题是:

为什么[
ModifyX
object“mx”]能够从
X
中更改[
X
object“X”]的值

作为参数传递的y的值在X中更改,但为什么在
main(String[]args)
中不更改呢

这种方法

s.setNum(y);
num.setNum(5);
获取值
y
的副本并将其传递给方法。Java总是按值传递,因此它总是传递值的浅拷贝。这意味着您可以更改此值的任一副本,而不影响其他副本

这种方法

s.setNum(y);
num.setNum(5);

num.num = 5;
因此,这里只更改了一个值,
X num
num
字段中的值

您的局部变量
y
10
,并且该变量在任何地方都没有更改,因此没有理由相信它应该更改。

此方法

s.setNum(y);
num.setNum(5);
获取值
y
的副本并将其传递给方法。Java总是按值传递,因此它总是传递值的浅拷贝。这意味着您可以更改此值的任一副本,而不影响其他副本

这种方法

s.setNum(y);
num.setNum(5);

num.num = 5;
因此,这里只更改了一个值,
X num
num
字段中的值


您的局部变量
y
10
,该变量在任何地方都没有更改,因此没有理由相信它应该更改。

因此'num'是类X的非公共成员,因此只有类本身能够直接修改它。但是,类X还提供“public”访问器函数“setNum”,这是任何使用该类的人都可以“间接”设置属性“num”的值的方法。

因此“num”是类X的非公共成员,因此只有类本身能够直接修改它。但是,类X还提供了“public”访问器函数“setNum”,这是任何使用该类的人都可以用来“间接”设置属性“num”的值的方法。

您以不正确的方式使用了许多微妙的术语,这表明您缺乏理解。我建议你先学习一些基础知识来帮助自己。你在哪里读到的?这是错误的。如果一个类有一个可访问的setter方法或者该字段可以直接访问,那么任何对象都可以修改该类的实例。至于你的另一个问题,它在X中的具体位置发生了变化?我发现你有点模棱两可。你得到的是必须发生的事情。清楚你想知道什么。有关更多帮助,请参阅
公共方法访问
将对象作为参数传递给方法的主题
@MohamedBathaoui。这个问题对您来说可能有点含糊不清,因为您比我更了解这一点。Peter Lawrence指出了我不知道的“传递值”,就像你们指出的,我应该更多地研究传递对象作为args。请不要假设每个人都知道你知道的那么多,你用了很多微妙的术语,但用得不恰当,这暗示你缺乏理解。我建议你先学习一些基础知识来帮助自己。你在哪里读到的?这是错误的。如果一个类有一个可访问的setter方法或者该字段可以直接访问,那么任何对象都可以修改该类的实例。至于你的另一个问题,它在X中的具体位置发生了变化?我发现你有点模棱两可。你得到的是必须发生的事情。清楚你想知道什么。有关更多帮助,请参阅
公共方法访问
将对象作为参数传递给方法的主题
@MohamedBathaoui。这个问题对您来说可能有点含糊不清,因为您比我更了解这一点。Peter Lawrence指出了我不知道的“传递值”,就像你们指出的,我应该更多地研究传递对象作为args。请不要以为每个人都知道你这么多do@Nexima360一个常见的混淆源是
X num
是一个引用,该引用是按值传递的,但它是一个浅拷贝,允许您更改已引用的
X
对象。这意味着调用方可以更改
x.num
,但不能更改
x
。@Nexima360一个常见的混淆源是
x num
是一个引用,该引用是按值传递的,但它是一个浅拷贝,允许您更改已被引用的
x
对象。这意味着调用方可以更改
x.num
,但不能更改
x