Assigning in Java?

前端 未结 5 560
悲&欢浪女
悲&欢浪女 2020-11-29 07:59

Say I set int A = int B. When I change A after, it will not change the value of B. But when I set a SomeClass A = SomeClass B, and I change A\'s contents (like a.cost), it c

5条回答
  •  孤城傲影
    2020-11-29 08:40

    Yes, it does - but the value of A is a reference, not a copy of the object itself.

    I like to give the following analogy...

    Suppose two people both have my address: that's like two variables of type House in Java. Now one of them comes and paints my door red. The second person will still see the red door if they visit:

    House jonsHouse = new House(); // Even the variable jonsHouse is only a reference
    
    House firstAddressCopy = jonsHouse; // Just a copy of the reference
    House secondAddressCopy = jonsHouse; // Just a copy of the reference
    
    firstAddressCopy.paintDoor(Color.Red);
    
    Color color = secondAddressCopy.getDoorColor(); // Now color will be red
    

    Basically, remember a few rules and things will become clear:

    • The value of an expression in Java is never an object - only ever a reference or a primitive value
    • (Corollary of first point) A variable never holds an object - only ever a reference or a primitive value
    • Assignment (and argument passing) always copies the value, whether that value is a reference or a primitive value

提交回复
热议问题