私は車の広告の小さなプログラムを書いたことがありますが、なぜ私の変数c1が私のセッターメソッドで作られた最新の車オブジェクトに更新されないのか混乱しています。Java:オブジェクトの参照変数がオブジェクトの新しいインスタンスに更新されていませんか?
public class coolCars {
public static void main(String args[]) {
Car c1 = new Car("Barry", "998D", "Prius", 50, 1800.50);
System.out.print(c1);
c1.setOwner("Jerry");
System.out.println(c1.owner());
/*c1.setOwner("Mick");
System.out.print(c1);
c1.setKil(70);
System.out.print(c1);*/
}
}
は、そして、ここでc1がまだオブジェクトの初期インスタンスを指している意味所有者変数が更新されていない、前述したように、私の車のクラス
final class Car {
private final String owner;
private final String reg;
private final String make;
private final int kilometres;
private final double price;
public Car(String ow, String r, String m, int k, double p) {
owner = ow; reg = r; make = m; kilometres = k; price = p;
}
public String owner(){return this.owner;}
public String reg(){return this.reg;}
public String make(){return this.make;}
public int kilometres(){return this.kilometres;}
public double price(){return this.price;}
public Car setPrice(double p){return new Car(owner(), reg(), make(), kilometres(), p);}
public Car setOwner(String ow){return new Car(ow, reg(), make(), kilometres(), price());}
public Car setKil(int k){return new Car(owner(), reg(), make(), k, price());}
public Car setMake(String m){return new Car(owner(), reg(), m, kilometres(), price());}
public String toString(){return "(" + owner + " " + reg + " " + make + " " + kilometres + " " + price + ") ";}
}
です。何か案は?ありがとう。
[mcve]を入力し、現在の例よりも読みやすいように*ロット*形式で入力してください。しかし基本的には、 'setOwner'メソッドは* new *' Car'インスタンスを生成し、その参照を返します。この参照はあなたの呼び出しコードでは無視されます。あなたが 'c1 = c1.setOwner(" Jerry ");を持っていたら、それはうまくいくでしょう。 'c1'変数の値を変更するためにオブジェクトの新しいインスタンスを作成するだけの理由は何でしょうか? –
本当にありがとう。あなたは間違いなく、私はそれを見ています。私は不器用なものの重要性について学んでいます。そして、私はc1がそれを新しい車に「自動的に」変えることを期待していると思います。ありがとう! – petegoast
私は 'setOwner'メソッドの名前を' withOwner'に改名し、個人的に(そして残りのメソッドも)変更しました。それは、その方法が何をするかという点でより直感的です。 –