世界上并没有完美的程序,但我们并不因此而沮丧,因为写程序本来就是一个不断追求完美的过程。 ——摘自周志明

java中传值与传引用

  1、一句话出自:think in Java,"When you're passing primitives into a method, you get a distinct copy of the primitive.

When you're passing a reference into a method, you get a copy of the reference.(如果java是传值,则传递的是值得副本;

如果java是传引用,则传递的是引用的副本。)

  2、对基本数据类型而言,就是把自己复制一份传递,即使副本变了,自己也不变。而对对象类型而言,它传的是引用

的副本。为什么不直接传对象?浪费内存且速度慢。

下面看个例子:

1、传值

 1 public class Test{
 2         public static void test(boolean test){
 3               tets = !test;
 4               system.out.println("In test (boolean) : test=" + test);
 5         }
 6          public static void main(String[] args){
 7                boolean test = true;
 8                system.out.println("before test(boolean) : test=" +test)
 9                test(test);
10                system.out.println("after test(boolean) : test=" +test)
11          }
12 }       
    运行结果:
         before test(boolean) : test=true
         In test (boolean) : test=false
before test(boolean) : test=true

2、传引用

public class Test{
         public static void test(StringBuffer str){
                  str.append(", World!");
         }  
         public static void main(String[] args){
                   StringBuffer string = new StringBuffer("Hello");
                   test(string);
                   system.out.println(string);
         }
}    
运行结果:
      Hello,World

另一种情况

public class Test{
         public static void test(String str){
                  str = "World";
         }  
         public static void main(String[] args){
                  String string = "Hello";
                  test(string);
                  system.out.println(string);
         }
}  
运行结果:
      Hello
原因:String类是final的,
str = "World";隐含重新生成一个对象。

总结:对于基本数据类型,java是传值的副本;对于一切对象型变量,java是传引用的副本。

 

posted @ 2018-09-03 08:50  白杯与咖啡  阅读(192)  评论(0编辑  收藏  举报