Java原始类型引用类型

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)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值