【问题标题】:What should be the output of the Java code and why? [duplicate]Java 代码的输出应该是什么,为什么? [复制]
【发布时间】:2021-05-03 04:25:09
【问题描述】:

在 Java 中,非原始数据类型通过引用传递。因此,这意味着对该对象所做的任何更改都将是全局的。 在下面的代码中,Test 对象被传递给静态函数changeValue() 以更改其属性的值。 所以,据我所知,对象是通过引用传递的,所以输出应该是:

test1:模糊

test2 : 广告牌

但是,输出是:

test1:模糊

test2 : 晕了

我错过了什么?

class Test {
        private String value; // instance variable
    
    public void setValue(String value) { // setter function
        this.value = value;
    }
    
    public String getValue() { // getter function
        return value;
    }
    
    public static void changeValue(Test test, String value) { //Function to change the value of an object
        test = new Test();
        test.setValue(value);
    }
    
    public static void main(String args[]) {
        // Object creation
        Test test1 = new Test();
        Test test2 = new Test();
        
        // Setting value
        test1.setValue("Fuzzy");
        test2.setValue("Wuzzy");
        
        // Changing value of test2
        Test.changeValue(test2, "Billboard");
        
        // Printing values of the objects
        System.out.println("test1 : " + test1.getValue());
        System.out.println("test2 : " + test2.getValue());
    }

}

【问题讨论】:

  • “非原始数据类型通过引用传递” 这并不完全正确 - 在 Java 中,非原始数据类型是引用类型,但引用是值并且是按值传递。
  • 方法 changeValue 没有改变值。它正在创建一个新对象。 (test = new Test();)
  • changeValue() 是静态的或按原样实现没有任何意义。 setValue() 是正确的:模仿。 “在 Java 中,非原始数据类型通过引用传递”:不,它们不是。即使是这样,您的 changeValue() 方法也不会按预期工作。
  • 糟糕的标题。重写以总结您的具体技术问题。

标签: java static-methods


【解决方案1】:
public static void changeValue(Test test, String value) { //Function to change the value of an object
    test = new Test(); 
    test.setValue(value);
}

在这里,您正在创建一个新的 Test 对象,您不需要这样做,因为您将更改的值将是新对象的值,只需删除此行: 测试 = 新的测试() 现在通过这样做,您将更改您已发送参数的对象的值。

【讨论】:

    猜你喜欢
    • 2016-11-19
    • 2022-11-27
    • 1970-01-01
    • 2022-12-07
    • 1970-01-01
    • 2015-09-24
    • 2019-11-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多