Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
比较Java';s使用C+传递值+';s通过值或-引用传递_Java_C++ - Fatal编程技术网

比较Java';s使用C+传递值+';s通过值或-引用传递

比较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) {

Java对对象和基元类型都使用传递值。因为Java传递引用的值,所以我们可以更改target的值,但不能更改地址


<>这与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;
}