java中方法参数的一些总结(2)

     Java程序设计语言使用值调用。也就是说,方法得到的是所有参数值的一个拷贝,特别是,方法不能修改传递给它的任何基本数据类

     方法参数共有两种类型:
     1、基本数据类型(数字、布尔值)。
     2、对象引用。

     一个方法不可能修改一个基本数据类型的参数。而对象引用作为参数就不同了,对象参数所引用的对象状态是可以被改变的,因为方法 

得到的是对象引用的拷贝,对象引用及其他的拷贝同时引用同一个对象。

    Java程序设计语言对对象采用的不是引用调用,实际上,对象引用进行的是值传递。

   总结Java程序设计语言中,方法参数的使用情况:
   1、一个方法不能修改一个基本数据类型的参数(即数值开和布尔值)。
   2、一个方法可以改变一个对象参数的状态。
   3、一个方法对象参数引用一个新的对象不改变方法外对象的值。

 1 package com.action;
 2 
 3 public class Test {
 4 
 5     private static int i = 1;
 6     private static String s = "string1";
 7     private static String[] ss = { "11", "bb", "cc" };
 8     private static int j = 10;
 9 
10     public int ii;
11     static {
12         System.out.println("静态块1");
13         System.out.println(i);
14     }
15     static {
16 
17         System.out.println("静态块2");
18     }
19 
20     /**
21      * @param args
22      */
23     public static void main(String[] args) {
24         
25         Test t = new Test();
26         t.changeInt(i);
27         System.out.println("傳入int值:" + i + ":::" + j);
28 
29         t.changeString(s);
30         System.out.println("傳入String值1:" + s);
31 
32         t.changeString2(s);
33         System.out.println("傳入String值2:" + s);
34 
35         t.changeStrings(ss);
36         System.out.println("傳入数组:" + ss[0] );
37 
38         t.changeTest(t);
39         System.out.println("傳入對象"+t.i);
40 
41         t.ii = 111;
42         t.changeTest1(t);
43         System.out.println(t.ii);
44     }
45 
46     public void changeInt(int i) {
47         i = 10;
48         j++;
49     }
50 
51     public void changeString(String s) {
52         s = new String("changeString");
53     }
54 
55     public void changeString2(String s) {
56         s.replace("o", "a");
57     }
58 
59     public void changeStrings(String[] s) {
60         s[0] = "numberChange";
61     }
62 
63     public void changeTest(Test t) {
64         Test tt = new Test();
65         tt.i = 100;
66         t = tt;
67 
68     }
69 
70     public void changeTest1(Test t) {
71         Test tt = new Test();
72         tt.ii = 1;
73         t = tt;
74     }
75 
76 }

结果:

静态块1
1
静态块2
傳入int值:1:::11
傳入String值1:string1
傳入String值2:string1
傳入数组:numberChange
傳入對象100
111

当传入的是字符串时,传入的是一个对象引用的拷贝,在方法体内部又有了新的字符串对象,在方法体内引用的拷贝最后指向的是这个新的字符串对象,而方法外引用指向的数据没变。

一个方法中可以有多个静态块。

原文地址:https://www.cnblogs.com/gexiaoshan/p/3067779.html