基本类型:其值直接存于变量中。
引用类型:除占据一定内存空间外,它所引用的对象实体(由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 0
int 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 */
}
}
本文深入探讨了Java中基本类型与引用类型的特性,通过具体示例解析了字段变量与局部变量的区别,并展示了变量传递机制的实际运作。
478

被折叠的 条评论
为什么被折叠?



