java - 对象中的别名

标签 java output pointer-aliasing

运行函数 foo1 时,为什么这段代码的输出是:15 30 5 而不是 15 15 5 ?

我知道对象 v 的指针现在指向对象 va1,因此代码行的输出: System.out.print(v.getI() + ""); 应该是 15。那为什么是 30 呢?

public class Value
{
    private int _i;

    public Value()
    {
        _i=15;
    }

    public int getI()
    {
        return _i;
    }

    public void setI (int i)
    {
        _i=i;
    }

}

public class TestValue
{
    public static void foo1()
    {
        int i=5;
        Value v= new Value();
        v.setI(10);
        foo2(v,i);
        System.out.print(v.getI() + " ");
        System.out.print(i+ " ");

    }

    public static void foo2( Value v, int i)
    {
        v.setI(30);
        i=10;
        Value va1= new Value();
        v=va1;
        System.out.print (v.getI() + " ");
    }

}

最佳答案

Java 仅支持按值传递。因此,当您将对象“v”传递给方法 foo2 时,将创建引用“v”的副本。因此,当您在 foo2 中设置 v = val1 时,foo2 中的引用副本将被更改,而不是 foo2 中的原始引用“v” >foo1。

关于java - 对象中的别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21813933/

相关文章:

c - 如何转换 sockaddr_storage 并避免违反严格的别名规则

c - 数组指针别名 - 未定义的行为?

java - 如何模拟主要

java - 在 Android 上创建多个日历事件

java - Java ATM 项目中使用 If 语句进行切换

c++ - block 如何在 C++ 程序中工作

java - 使用附加参数 hibernate 多对多

c++ - 程序输出 "Heads"而不管随机生成的答案

c++ - 在C++中将cout从不同来源重定向到同一文件

c++ - 正确地将 int 结构数组重新解释为 int 数组