|
|
1
12
Java根本没有传递引用(您在C++代码中使用的)。引用按值传递。(的值
通常,如果您需要:
请注意,字符串与list等稍有不同,因为字符串是不可变的。要修改集合(任何可变集合),不需要创建新集合,只需修改 对象 通过原始参考:
你可以这样称呼它:
变异现有的 对象 以及将变量的值更改为引用 不同的 目标至关重要。如果您想让现有的集合单独存在并创建一个新的集合,则必须显式地这样做:
你可以这样称呼它:
这能满足你所需要的一切吗? |
|
|
2
13
参数传递、引用调用和值调用(简短回答)在C++中有两个参数传递窗体, 按值调用 和 参考呼叫 . (更好的名字是 按值调用 是 按新值调用 但是我离题了。) 在Java程序中,所有参数都通过。 按价值 . 有人认为Java是通过引用传递对象的,但是它们错了。 参考值 但这根本不是一回事。]
这个
价值
Java对象(以及通过的对象)是
指针
对对象(令人困惑地,但精确地称为对象的引用),并调用Java对象方法,例如
在C++中,相同的调用看起来像:
如果操作对象(例如,通过调用它的方法)作为参数传递给爪哇中的方法,则可以修改该对象,如果调用方仍有变量保存该对象,则可以看到这些更改。如果只分配给(本地)参数变量,只需更新存储在本地变量中的指针,对象不会受到影响,调用方不会注意到这一点。 所以,你的问题的简短答案是Java通过值传递,而C++中的引用调用机制在Java中是不可用的。 参数、变量和按值调用(长答案)为了理解这里发生的事情,我们需要更深入地了解变量和参数传递的机制。 变量一般来说,编程语言中的变量是与值关联的标识符。表示在 运行时 (我们在这里忽略宏变量、被“编译掉”的常量等等)必须 二 与它们相关联的值。下面是一个例子,解释了为什么:
与变量关联的这两个值称为 R值 以及 L值 . (这些名字是克里斯托弗·斯特拉奇发明的;我是一个粉丝。)语言中的其他结构根据上下文指这些值中的一个或其他值。例如:
指的是
在大多数编程语言中,我们显式地操纵变量的r值,并让编译器(从程序的形式)为我们自动管理l值。我们必须对它们有一点了解(在C语言中,特别是在数组中,我们假设了很多关于L值的东西),但大多数时候我们不需要知道力学原理。 按值调用看这个电话:
这里的参数发生了什么?首先是的r值
现在,什么时候
参考呼叫请看这个C++调用:
这里是参数的l值
Java不这样做。 |
|
|
3
1
你用Java编写的代码相当于这个C++代码:
也许现在你看到发生了什么。C++引用实际上是环绕指针的。因此,如果没有引用,代码将如下所示:
注意无害的符号和:
这才是真正的秘密。这一点,以及前面解释的关于Java字符串的不可变性的答案应该使您了解Java和C++引用之间的区别。 干杯, JRH。 |
|
|
4
0
Java中的字符串是不可变的,一旦创建就不能修改。在dohello()中使用赋值实际上创建了一个新的字符串对象,而不是修改现有的字符串对象。结果,2个Java引用(一个在主,另一个在DoHoad)分别向2个不同的字符串引用字符串。这就是为什么你会看到C++和Java之间的不同结果。 |
|
AstralHex · 矩阵乘法代码工作不正常 1 年前 |
|
|
Fishie · 作为类成员的智能指针是否仍然自动释放?[关闭] 1 年前 |
|
|
Die4Toast · 递归调用成员箭头运算符-> 1 年前 |
|
|
Anka Hanım · 关于结构和动态数组地址的问题 1 年前 |