比较Java';s使用C+传递值+';s通过值或-引用传递
Java对对象和基元类型都使用传递值。因为Java传递引用的值,所以我们可以更改target的值,但不能更改地址比较Java';s使用C+传递值+';s通过值或-引用传递,java,c++,Java,C++,Java对对象和基元类型都使用传递值。因为Java传递引用的值,所以我们可以更改target的值,但不能更改地址 这与C++比较如何?区别在于你是否能影响调用函数中的变量。< /P> 让我们暂时把物体放在一边。在纯按值传递的Java中,不能更改传递到被调用函数中的变量的调用函数值。例如: void foo() { int a = 42; bar(a); System.out.println("foo says: " + a); } void bar(int a) {
<>这与C++比较如何?区别在于你是否能影响调用函数中的变量。< /P> 让我们暂时把物体放在一边。在纯按值传递的Java中,不能更改传递到被调用函数中的变量的调用函数值。例如:
void foo() {
int a = 42;
bar(a);
System.out.println("foo says: " + a);
}
void bar(int a) {
a = 67;
System.out.println("bar says: " + a);
}
void foo() {
int a = 42;
bar(a);
System.out.println("foo says: " + a);
}
void bar(int a) {
a = 67;
System.out.println("bar says: " + a);
}
如果调用foo
,您将看到:
bar says: 67
foo says: 42
请注意,bar
定义为接收引用(int&a
)。如果调用bar
,您将看到:
bar says: 67
foo says: 67
你看:
bar says (after add): 1
bar says (after new): 0
foo says: 1
foo says: same list? true
吧台上写着(添加后):1
吧台上写着(新的之后):0
傅说:1
傅说:同样的名单?符合事实的
bar
可以更改传入其引用的对象的状态(按值),但不能更改foo
对该对象的引用foo
看不到创建的新列表bar
。在Java中,您可以按值传递原语和引用。没有其他选择
在C++中,可以通过值或引用传递原语和指针。如果你通过引用,Youc会看到在传递给方法后,对值或指针的更改,并且可以改变原始值。C++中的 < p>与java相当的是这个< /p>
void Swap(Type* A, Type* B)
{
// here we have pointers to type A (in Java they are called references and don't use * syntax)
A->DoThis() // can call with -> a method on object
//if you try to swap A with B not possible because we don't have A*/B* reference
// see bellow how to do this
}
< C++中处理上述限制的方法是
void Swap(Type& A, Type& B)
{
Type& temp = A;
A = B;
B = temp;
}
区别在于是否可以影响调用函数中的变量 让我们暂时把物体放在一边。在纯按值传递的Java中,不能更改传递到被调用函数中的变量的调用函数值。例如:
void foo() {
int a = 42;
bar(a);
System.out.println("foo says: " + a);
}
void bar(int a) {
a = 67;
System.out.println("bar says: " + a);
}
void foo() {
int a = 42;
bar(a);
System.out.println("foo says: " + a);
}
void bar(int a) {
a = 67;
System.out.println("bar says: " + a);
}
如果你打电话给foo,你会看到:
bar says: 67
foo says: 42
酒吧:67
福说:42
bar无法更改foo的a
<如果C++通过值,那么这是真的。但是,如果通过引用传递,则传递的是对调用代码变量的引用。这意味着被调用的代码可以改变它: C++中的差异在什么意义上?你已经发布了C++使用了通过值和传递引用。C++中的不同之处在于,你可以通过引用,这样你就可以从调用函数中改变调用函数中的值。@ @ Iskhanhana标记不需要,如果你喜欢,就投票赞成:)因为T.J. Crowder的回答。这个问题不应该被忽视downvoted@Jerome同意。我试图整理这个问题,使它在以后的过程中更有用。例如,您可以看到传递给函数的指针值发生了更改(例如,您传递了一个指向内存地址a的指针,函数结束后,指针可以指向地址B)
void foo() {
int a = 42;
bar(a);
cout << "foo says: " << a;
}
void bar(int& a) {
a = 67;
cout << "bar says: " << a;
}