Java原始类型引用类型
程序员文章站
2022-03-25 10:34:34
...
Java原始类型引用类型
文章目录
原始类型
Java原始类型有8中、分别是:bool byte char short int long float double
原始类型的函数参数传值方式是按值传递!
这个很容易理解
引用类型
引用类型函数传递参数的方式是按引用传递,在c++里面理解的话就是 (传递本身&) 这个时候! Java原始的8个数据类型分别有他们对应的引用类型封装!
根据以上的猜想、我猜测他们的函数传递参数的方式是按照 引用传值!
但是下面的一个例子颠覆了我的认知:
package cn.zhaojunchen;
public class Test {
static void inc(int a) {
a = a + 1;
}
static void inc_ref(Integer a) {
a = a + 1;
}
public static void main(String[] args) {
Integer value = -1;
System.out.println(value);
inc(value);
System.out.println(value);
inc_ref(value);
System.out.println(value);
}
}
// 输出:
-1
-1
-1
ok、分析一下首先对于inc(value);
这里面的传递参数应该是 Integer自动拆箱变为int、然后int a是按照值传递的方式、所以inc(value)
不会是value变化! (这个很好理解)
inc_ref(value);
则需要调试一下:结果如下
步进函数:查看参数a:
再次执行:
解释就是: 参考于此
理由很简单,可以看到 Integer 类中final的value字段(private final int value;),说明一旦integer类创建之后他的值就不能被修改,在 index++ 的时候Integer是创建一个新的类,所以这个第二次输出的时候结果是一样的!
Java泛型编程
Java泛型编程> 必须为引用类型:我理解的是数据结构(如链表)里面存储的都是对象的引用(从c的角度讲是对象的指针!)、而不是存储的原始值
Stack<Item> stack = new Stack<Item> ()
Item 必须是引用类型!
原始类型(如int)及其对应的类型(Integer) 会存在自动装箱和自动拆箱的操作!
Stack<Integer> stack = new Stack<Integer>();
stack.push(12);// 自动装箱(int to Integer)
int i = stack.pop(); // 自动拆箱(Integer to int)
上一篇: 4.6 CSS常用属性