值传递和引用传递
1.值传递
1 package com.sky.test; 2 3 public class Test { 4 public static void main(String[] args) { 5 int i = 5; 6 valueTransmit(i); 7 System.out.println("方法结束后的i : " + i); 8 9 } 10 11 public static void valueTransmit(int i){ 12 i++; 13 System.out.println("方法中的i : " + i); 14 } 15 }
结果为:
方法中的i : 6
方法结束后的i : 5
可以清楚的看到,方法中的i的值改变了,进行++操作,但是当方法结束后,i的值又变回了5,也就是方法调用之前的值,这就是值传递的涵义。
2.引用传递
1 package com.sky.test; 2 3 public class Test { 4 public static void main(String[] args) { 5 6 User user = new User("10086", "张三"); 7 quoteTransmit(user); 8 System.out.println("方法结束后的user对象的值:"+user); 9 } 10 11 public static void quoteTransmit(User user){ 12 user.setUserId("10000"); 13 user.setName("李四"); 14 System.out.println("方法中的user的值:"+user); 15 } 16 } 17 18 class User { 19 private String userId; 20 private String name; 21 22 public User(String userId, String name) { 23 this.userId = userId; 24 this.name = name; 25 } 26 27 public String getUserId() { 28 return userId; 29 } 30 public void setUserId(String userId) { 31 this.userId = userId; 32 } 33 public String getName() { 34 return name; 35 } 36 public void setName(String name) { 37 this.name = name; 38 } 39 @Override 40 public String toString() { 41 return "User [userId=" + userId + ", name=" + name + "]"; 42 } 43 44 }
结果为:
方法中的user的值:User [userId=10000, name=李四]
方法结束后的user对象的值:User [userId=10000, name=李四]
主方法中创建了一个user对象,赋值,方法中将这个对象作为参数传递,方法中并且修改了user的属性值,并且修改后打印,当方法结束后在主方法中继续打印user对象,发现两次输出的值完全一样,方法中修改了,这个对象的值意味着方法结束后也是被修改了,这就是引用传递。