结论:
1. 对于值传递,如int, long等基本类型,不管传入方法后怎么修改,都改变不了方法外面的值。
2. 对于引用传递,如果传入方法后指向了一个新的对象,那么无论怎么修改也改变不了方法外面的对象。
如果传入方法后没有指向新对象,直接操作,就会改变方法外面的对象,因为这是在操作同一个对象。
结论下完直接上干货代码:
public class DeliveryTest { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } public static void changeInt(int num){ num = 20; } public static void changeString(String string){ string = "string"; } public static void changeNewString(String string){ string = new String("bbb"); } public static void changeObject(DeliveryTest object){ object.setName("lisi"); } public static void changeNewObject(DeliveryTest object){ object = new DeliveryTest(); object.setName("lisi"); } public static void main(String[] args) { int num = 10; System.out.println(num); DeliveryTest.changeInt(num); System.out.println(num); System.out.println("==============================="); String str = "str"; System.out.println(str); DeliveryTest.changeString(str); System.out.println(str); System.out.println("==============================="); String string = "aaa"; System.out.println(string); DeliveryTest.changeNewString(string); System.out.println(string); System.out.println("==============================="); DeliveryTest deliveryTest = new DeliveryTest(); deliveryTest.setName("zhangsan"); System.out.println(deliveryTest.getName()); DeliveryTest.changeObject(deliveryTest); System.out.println(deliveryTest.getName()); System.out.println("==============================="); DeliveryTest dt = new DeliveryTest(); deliveryTest.setName("zhangsan"); System.out.println(deliveryTest.getName()); DeliveryTest.changeNewObject(dt); System.out.println(deliveryTest.getName()); } }
执行完结果: