从C的角度看java

前言

什么是标题党,这篇文章就是,咋一看是不是以为是哪个大牛来进行学术分享,那可让你们失望了,我只是一个刚入门几天C和一段时间android 开发的未来准大神,那为何敢起这么大的标题?肯定是吸引各位看官前来阅读啊,不然咋叫标题党😄 😄😄 ,好了言归正传,其实写这边文章主要是记录下在我学习C的过程中联系到java 语法的一些实现原理,这里只说了指针和java中的引用,后续可能用跟进其他。

JAVA 中引用和C中指针的联系和区别

1.指针

指针:指针是一个地址

指针变量:存放指针的变量

通过代码来看可能更加直观点,如下图
在这里插入图片描述
打印结果如下
在这里插入图片描述
我们可以看到p是指针变量,打印的是i这个变量的地址,*p打印是i的值可能不是很理解,那我们可以看下图

在这里插入图片描述
p是指针,但是也是个变量,只不过他存储的是i这个变量的地址,我们知道赋值的过程就是通过地址找值,那么p的地址存储的是i的地址,i的地址存储的是50,所以​*p输出50

上面说了一些指针的概念和基本使用,咱们继续往下面看,刚才我们是通过找地址来得到i的值,那请思考下,那我们可不可以通过改变 p里面存储的地址来改变i的值呢?咱们还是通过代码来验证我们的猜想!
在这里插入图片描述
通过代码和vs 查看内存工具可以发现,通过改变地址来改变i的值是可行的。

2.引用

接下来咱们来说说java中的引用,在java中,数据类型可分为基本数据类型,和引用类型,基本数据类型暂且不说,引用类型有:数组,类,接口,只有引用类型才有引用。
(1)值类型和引用类型

        int num=20;
        String str="thw";
        num=30;
        str="thw牛皮";
        System.out.println(num+" "+str);

输出 num:30,str:thw牛皮,咱们画个图
在这里插入图片描述
在基本数据类型 num=10 在java 中里面的内存分配是这样的:在内存中开辟一个空间,这块空间叫num,里面的内容是10,而引用类型内存分配是:分配两块内存,一块存引用,一块存值。

num 是基本数据类型,值就直接保存在变量中,str 是引用类型,变量中保存的是地址,对于基本数据了类型赋值,会直接修改变量的值,替换为新的值,而引用数只会改变变量中所保存的地址信息,原来对象的地址会被覆盖掉,重新写入新对象的地址数据,但是原来的对象不会发生改变,只是不在任何引用所指向对象,即垃圾对象,后续会被回收

通过上面对C指针的分析和java 引用赋值的分析,我们不难发现java的引用和C的指针很相似,java的引用也是一个值,但是这个值不是某块内存的地址,而是某个值所在内存的地址。他关注的是值,其实引用就是一个封装过的指针,它屏蔽了指针的复杂性,在编译器的实现中,引用最后还是会被转成指针。

后记

突然灵感爆发,熬夜把这边文章写完了,最后结论可能不知道是在说啥,总结起来就是指针和java 的引用有区别但是也有联系,反正就是个意思,如有错误的请各位大神指出,通过学习C的指针,把java的基本数据赋值,和引用类型赋值又重新理清了一遍,这大概就是这篇文章最好的收获吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值