• 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

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

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

  • 相关阅读:
    深浅拷贝
    生成式、生成器、迭代对象、迭代器
    memcached
    redis安装配置
    基于docker搭建mysql主从复制架构
    centos 安装 最新版本的docker
    Linux小技巧
    神奇的'license': 'AGPL 3.0'标签报错
    新博客重新开通了
    通过linkserver不能调远程表值函数
  • 原文地址:https://www.cnblogs.com/gexiaoshan/p/3067779.html
Copyright © 2020-2023  润新知