变量及其传递

来源:互联网 发布:西南交大网络教育网址 编辑:程序博客网 时间:2024/05/17 03:24

基本类型:其值直接存于变量中。

引用类型:除占据一定内存空间外,它所引用的对象实体(由new创建)也要占用一定的内存空间(我的理解是差不多就是C++创建了个变量  然后又搞了个指针指向它。。)

package com.pku.edu.ch5;public class MyDate {private int day;private int month;private int year;public MyDate(int day, int month, int year) {super();this.day = day;this.month = month;this.year = year;}void addYear() {year++;}public void display() {System.out.println(year + "-" + month + "-" + day);}public static void main(String[] args) {MyDate m = new MyDate(2, 9, 2003); /*创建了一个对象实例 存储在堆中  m为引用变量 指向该对象实例 */MyDate n = m; //使得引用变量n也指向该对象实例m.addYear();m.display(); /* result: 2004-9-22*/n.display(); /* result: 2004-9-22*/ //2引用变量输出的内容相同}}

字段变量(field)和局部变量(local variable)

前者是在类中,后者是方法中定义的变量或者方法的参变量

区别:

1.字段变量为对象的一部分 存储在堆中 局部变量是存储在栈中的

2.生命周期不同。 (很自然 和C++完全一样)

3.初始值:field会自动赋初值。 而局部变量必须显示赋值

4. 局部变量只能被final修饰 因为它和类无关。


变量的传递:

JAVA是值传递的。

对于引用型的变量传递的是引用 (自己理解应该就是C++中的指针传递)。可以改变对象的属性 

package com.pku.edu.ch5;public class TransByValue {public static void main(String[] args) {int a = 0;modify(a);System.out.println(a); // result 0int b[] = new int[1];modify(b);System.out.println(b[0]); // result 1}public static void modify(int a) {a++;}public static void modify(int b[]) {b[0]++;b = new int[5]; /* 将b指向一个新的引用 原来的b不会改变 学过C++的很好理解吧  就是指针传递*/System.out.println(b[0]); /*指向新的对象实例 b[0]为0 */}}



0 0
原创粉丝点击