我正在研究点运算符的工作原理,它与C ++中的*运算符相同,即它们都解决了我们解除引用的目的。当我们将dot应用于某个类或某个对象时,我们进入类/对象的堆,并且可以访问类的静态变量或方法,以及方法的实例变量。
现在我的疑问是,当我通过使用点运算符将一些方法应用于对象时,也就是说,现在我可以使用存储在我的方法中的实例变量中的数据。但是现在当我尝试更改这些实例变量的数据时,它往往会发生变化。据我所知,我不能改变像java这样的语言方法中的数据。
有人可以向我解释一下吗?
答案 0 :(得分:1)
据我所知,我无法改变像java这样的语言方法中的数据。
Java是按值传递的......但是对于引用类型(数组或类的实例),值是引用。
dot"运算符"正在对参考文献执行操作。
在Java中,你通常只是忘记了那里存在一个引用并且(在心理上)将对象和对象的引用视为同一个事实的事实。 (有一个引用可用,即使在实例方法的情况下引用当前对象的字段......它是this
,并且您正在隐式使用它。)
这与C ++不同。在C ++中,对象类型和类型的引用(指针)是不同的,它们的值(对象和引用)同样是不同的。您可以创建,传递和使用对象,而无需引用它。并且编译器不会阻止您具有实际上不指向对象的引用。后者的行为未定义......
同样在C ++中,您可以创建并传递对非对象的引用。例如,您可以传递对变量的引用。你不能用Java做到这一点。