java数据类型传递探索

来源:互联网 发布:cad办公室网络布线图 编辑:程序博客网 时间:2024/05/22 03:31

 

学习java也有一些时间了,但是对java里的数据类型传递方法还是不甚了解
以下是我在jre1.6.0_04 运行环境 上对java 数据内型传递方式的探索
感觉收获还是彼多,因为出现了我遇料之外的结果。

一、基本数据类型:
   基本类型为值传递,基本类型中的数组为引用传递;

探索代码如下:
package cn.cn;

public class Ttest2 {

 public void change() {
  int a = 45;
  int b = 12;   //初始化
  System.out.println(a + "  " + b); //初始化后输出
  a = b; //b赋给a
  a = 534;//对a重新赋值
  System.out.println(a + "  " + b);// 操作后再输出

 }

 public static void main(String args[]) { //主函数
  Ttest2 tt = new Ttest2();
  tt.change();
 }

}
输出结果为: 45   12
             543   12;      结论:基本类型为值传递

package cn.cn;
public class Ttest2 {

 public void change() {
    int a[]=new int [2];
    int b[]=new int [2];  //创建数组 a ,b
  
    for(int i=0;i<2;i++){//初始化数组a
     a[i]=6;
    
    } 
    for(int j=0;j<2;j++){//初始化数组b
     b[j]=10;
    }
    for(int k=0;k<2;k++){//初始化后输出 
     System.out.println("a["+k+"]:"+a[k] + "  " +"b["+k+"]:"+b[k]);
    }
  a=b;    //对数组操作
  
  for(int m=0;m<2;m++){
      System.out.println("a["+m+"]:"+a[m] + "  " +"b["+m+"]:"+b[m]);//操作后输出
     }
  

 
  for(int n=0;n<2;n++){ //改变a里面的值
     a[n]=989;
  }
 
  for(int m=0;m<2;m++){ //改变a里的值后再输出
     System.out.println("a["+m+"]:"+a[m] + "  " +"b["+m+"]:"+b[m]);//操作后输出
    }
 }
 public static void main(String args[]) {//主函数
  Ttest2 tt = new Ttest2();
  tt.change();
 }

}
输出结果为:
a[0]:6  b[0]:10
a[1]:6  b[1]:10
a[0]:10  b[0]:10
a[1]:10  b[1]:10
a[0]:989  b[0]:989
a[1]:989  b[1]:989  

package cn.cn;

public class Ttest2 {

 public void change() {
  int a[] = new int[2];
  int b[] = new int[2]; // 创建数组 a ,b

  for (int i = 0; i < 2; i++) {// 初始化数组a
   a[i] = 6;

  }
  for (int j = 0; j < 2; j++) {// 初始化数组b
   b[j] = 10;
  }
  for (int k = 0; k < 2; k++) {// 初始化后输出
   System.out.println("a[" + k + "]:" + a[k] + "  " + "b[" + k + "]:"
     + b[k]);
  }
  a[0] = b[0];
  a[1] = b[1];// 对数组操作

  for (int m = 0; m < 2; m++) {
   System.out.println("a[" + m + "]:" + a[m] + "  " + "b[" + m + "]:"
     + b[m]);// 操作后输出
  }

  for (int n = 0; n < 2; n++) { // 改变a里面的值
   a[n] = 989;
  }

  for (int m = 0; m < 2; m++) { // 改变a里的值后再输出
   System.out.println("a[" + m + "]:" + a[m] + "  " + "b[" + m + "]:"
     + b[m]);// 操作后输出
  }
 }

 public static void main(String args[]) {// 主函数
  Ttest2 tt = new Ttest2();
  tt.change();
 }

}
输出结果为:
a[0]:6  b[0]:10
a[1]:6  b[1]:10
a[0]:10  b[0]:10
a[1]:10  b[1]:10
a[0]:989  b[0]:10
a[1]:989  b[1]:10
                    结论:  基本类型数组对数组名操作  为引用传递   对具体值操作为值传递


二、String 类

package cn.cn;

public class Ttest2 {

 public void change() {
  String a = "中国";
  String b = "韩国"; // 初始化String 变量a,b
  System.out.println(a + "  " + b); // 初始化后输出

  a = b;
  System.out.println(a + "  " + b); // 对数据操作后输出

  a = "美国";
  System.out.println(a + "  " + b); // 改变a的值后输出
 }

 public static void main(String args[]) {// 主函数
  Ttest2 tt = new Ttest2();
  tt.change(); // 方法调用
 }

}

输出结果:
中国  韩国
韩国  韩国
美国  韩国

package cn.cn;

public class Ttest2 {

 public void change() {
  String a[] = { "中国", "俄罗斯" };
  String b[] = { "韩国", "美国" }; // 初始化String 变量a,b
  for (int i = 0; i < 2; i++) {
   System.out.println("a[" + i + "]:" + a[i] + "    " + "b[" + i
     + "]:" + b[i]); // 初始化后输出
  }
  a = b;  //对数组操作
  for (int j = 0; j < 2; j++) {
   System.out.println("a[" + j + "]:" + a[j] + "    " + "b[" + j
     + "]:" + b[j]); // 对数据操作后输出
  }
  a[0] = "加拿大";
  a[1] = "加拿大";

  for (int j = 0; j < 2; j++) {
   System.out.println("a[" + j + "]:" + a[j] + "    " + "b[" + j
     + "]:" + b[j]); // 对数据操作后输出
  } // 改变a的值后输出
 }

 public static void main(String args[]) {// 主函数
  Ttest2 tt = new Ttest2();
  tt.change(); // 方法调用
 }

}

输出结果:
a[0]:中国    b[0]:韩国
a[1]:俄罗斯    b[1]:美国
a[0]:韩国    b[0]:韩国
a[1]:美国    b[1]:美国
a[0]:加拿大    b[0]:加拿大
a[1]:加拿大    b[1]:加拿大


         结论:String 类型为值传递;但String 数组为引用传递

三、类类型:
package cn.cn;

public class Student {

 private String name; // 学生名字属性

 public void setName(String name) { // 为学生取名字的方法
  this.name = name;
 }

 public String getName() { // 取得学生的名字的方法
  return this.name;
 }

 public static void main(String args[]) { // 主函数
  Student stu_1 = new Student(); // 创建学生对象stu_1
  stu_1.setName("张三"); // 初始化名字属性

  Student stu_2 = new Student();// 创建学生对象stu_2
  stu_2.setName("李四"); // 初始化名字属性

  System.out.println(stu_1.getName() + "   " + stu_2.getName()); // 初始化后输出

  stu_1 = stu_2; // 对象操作

  System.out.println(stu_1.getName() + "   " + stu_2.getName()); // 操作后输出

  stu_1.setName("王五"); // 改变学生对象stu_1的名字

  System.out.println(stu_1.getName() + "   " + stu_2.getName()); // 改变对象stu_1的名字后输出
 }
}
输出结果:
张三   李四
李四   李四
王五   王五    
                结论:类类型(String 类除外)数据为引用传递


根据以上探索:
结论: 总的来说:     数组(对数组名的操作)  和   类类型(String类除外) 为引用传递
                    
                     基本数据类型为值传递      
                               
通过以上探索 (jre1.6.0_04 上对java 数据内型传递方式的探索)  使我对java里数据类型的传递方式  有了更深的了解 

原创粉丝点击