指针

首先要弄清楚指针和c中的指针是不一样的,前者是概念,后者是具体实例。

换句话说,C中的指针只是指针中的一种,其他语言也有指针,比如C++。但是我们同别人交流的时候,大都不会从概念上去交流,一般会选择其中一个实例去说,这个实例大部分时候都是C中的指针。久而久之,概念和实例被模糊化,C中的指针也成为了指针本身。

在这里我还是有必要给自己的大脑提个醒,不要将概念和实例混为一谈,要分清两者的界限。

指针定义

既然这么多语言都有自己的指针,那么这个指针到底是什么有没有一个明确的定义。这是维基百科上的解释。

一句话解释就是 指针就是一个值,而这个值是某块内存的地址,通过这个值,就可以找到这块内存

C语言中的指针C语言的指针具有以下特点

C语言的指针可以指向内存的任何地方。C语言的指针可以参与数值运算,加法、减法。C语言的指针还可以指向指针,以及指向指向指针的指针(因为指针就是一个值,也要存在内存中,所以它也有一个内存地址)

以上特点反映了指针寻地址的特性。另外,指针这个东西,只关心内存的地址,不关心内存存的是什么东西,如果该地址中的对象被搬走了,指针不会自动改变指向。

Java中的引用

在了解引用之前,首先让我们先了解一下,java的引用类型。? ? ? 在JAVA中数据可以简单分为两种类型,基本类型和引用类型。继续细分的话基本类型又可以分为四种整数型 byte、short、int、long?两种浮点型float、double一种字符类型char 一种布尔型?boolean。引用类型可以说有无数种,包括String、数组、object等等。

在java种只有引用类型才有引用

基本类型内存分配

在基本类型中,你定义变量 int i = 0; 那么它在内存里的分配是这样的:内存里分配了一块空间,这块空间的名字是i,里面的内容是0

当你使用i的时候就可以访问这块空间里的内容。

引用类型内存分配

与基本类型内存分配不同,引用类型在内存分配时,会分配两块内存,一块存储引用,一块存储值。

比如在定义String s; 或者String s

= null; 时。系统会分配一块内存用来引用值(在本例中装的是空值null,也就是什么也没有装)

至于具体这个s(引用)分配在哪,要看他被声明的位置。如果s被声明为局部变量,那s(引用)就在栈空间。如果不是局部变量,那就不在栈上分配。

当你为s赋值的时候,s = new String("wqlm");

情况发生了改变,引用有了一个明确的指向位置,引用的值也不再是空值。

从上例可以看到在定义变量时,引用没有实体,不占空间,只有在变量赋值时,引用才有实际值

java引用的实质

从上面可以看出,java的引用和c的指针很相似

java的引用也是一个值,但是这个值不是某块内存的地址,而是某个值所在内存的地址。他关注的是值,当值搬家后,引用也会跟着改──内存碎片整理

其实引用就是一个封装过的指针,它屏蔽了指针的复杂性,在编译器的实现中,引用最后还是会被转成指针

java的引用与c的指针的区别

java的引用是某个值所在内存的地址。c的指针是某块内存的地址。c的指针的值可以认为是个int类型,长度一般是计算机字长。java的引用,声明变量时(不赋值),不占空间。(原因见引用类型内存分配)java的引用初始值为 null。c的指针是int,如不初始化指针,那它的值就不是固定的了。java的引用不可以计算。c的指针是int,他可以计算,如++或--,所以经常用指针来代替数组下标。

番外·java的引用传递

java的方法在传递参数时,一般有两种情况参数是基本类型,直接将基本类型的值传递过来参数是引用类型,将参数的引用值copy一份传递过来

因此,也可以说java只有值传递,所谓的引用传递,传递的是引用的值

上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理。

java 指针 引用_java中的引用与c中的指针相关推荐

  1. java直接引用_Java虚拟机 - 符号引用和直接引用理解

    我了解了调用函数时符号引用如何转换为直接引用的,但是对于类变量,实例变量的解析方法还是不太清楚. 符号引用是只包含语义信息,不涉及具体实现的:而解析(resolve)过后的直接引用则是与具体实现息息相 ...

  2. java强引用弱引用_Java 的强引用、弱引用、软引用、虚引用

    1.强引用(StrongReference) 强引用是使用最普遍的引用.如果一个对象具有强引用,那垃圾回收器绝不会回收它.如下: Object o=new Object(); // 强引用 当内存空间 ...

  3. java 静态内部类 弱引用_Java基础 强引用、弱引用、软引用、虚引用

    前言 在ThreadLocal源码中,其中嵌套类ThreadLocalMap中的Entry继承了WeakReferenc.Java中提供这四种引用类型主要有两个目的:第一是可以让程序员通过代码的方式决 ...

  4. java还值_Java到底是引用传递还是值传递

    前言 前段时间在群里看到类似这样一个问题,下面的代码会输出什么呢? public void test(){ String str = "hello"; change(str); S ...

  5. java 方法引用_JAVA 8 方法引用 - Method References

    什么是方法引用 简单地说,就是一个Lambda表达式.在Java 8中,我们会使用Lambda表达式创建匿名方法,但是有时候,我们的Lambda表达式可能仅仅调用一个已存在的方法,而不做任何其它事,对 ...

  6. java函数调用实例_Java使用方法引用实现任意对象的实例方法

    方法引用是Java8中的一个新特性,它与Lambda表达式相关. 它允许我们在不执行构造函数或方法的情况下引用它们. 方法引用和lambda表达式相似,因为它们都需要由兼容的函数接口组成的目标类型. ...

  7. java catch 抛出异常_java - 在catch和最后claus中抛出异常

    java - 在catch和最后claus中抛出异常 关于大学的Java问题,有这段代码: class MyExc1 extends Exception {} class MyExc2 extends ...

  8. java 线程分配_Java多线程原子引用分配

    我有一个缓存,该缓存是使用Simeple HashMap实现的.喜欢 - HashMap cache = new HashMap(); 大部分时间都使用此缓存从中读取值.我有另一个重新加载缓存的方法, ...

  9. java spring 数据库_JAVA - SpringBoot项目引用MyBatis操作数据库

    JAVA - SpringBoot项目引用MyBatis操作数据库 添加POM依赖: org.mybatis.spring.boot mybatis-spring-boot-starter 2.1.1 ...

  10. java正则表达式 引用_java – 正则表达式检索引用的字符串和引用字符

    我有一种语言,它将一个字符串定义为单引号或双引号,通过加倍将字符串转义为字符串中的分隔符.例如,所有以下内容都是合法字符串: 'This isn''t easy to parse.' 'Then Jo ...

最新文章

  1. 农业谋定投资-农业大健康·万祥军:解读胡春华补三农短板
  2. [我的1024开源程序]200元仿豆瓣小程序带评论
  3. sql server 2008 r2卸载重装_免费下载:Intouch软件、Windows操作系统、SQL数据库,VB6.0、C#...
  4. python 生成字符串_Python字符串生成器,按照特定的顺序
  5. Linux卸载搜狐,搜狐的linux笔试题
  6. WebService的应用之winform身份验证
  7. Bailian3164 奇偶排序【排序】
  8. Redis 安装配置(一)
  9. python清空list_python怎么清空list
  10. 输出毫秒_毫秒级网络监控(网络示波器)
  11. 《分布式系统架构:技术栈详解与快速进阶》导读
  12. 区块链开发主流编程语言居然是Go语言
  13. 听NBA现场讲解很爽,但啥都听不懂?快来学学术语!
  14. 单页面应用首页白屏时间过长和SEO不友好的问题的一些技术的优缺点和原理
  15. EXCEL编程经验总结
  16. 阿里开放平台接入——开放平台注册与API调用
  17. oracle 11g函数包缓存,Oracle 11g 的PL/SQL函数结果缓存
  18. mysql semi-sync(半同步复制)
  19. html交叉轴排列,操作一下竖轴- 使用align-items属性设置纵轴排列方式
  20. Shell攻关之正则表达式

热门文章

  1. Go1.18 新特性:高效复制,strings, bytes 库新增 Clone 功能
  2. IDEA依赖冲突分析神器—Maven Helper
  3. 日志服务与SIEM(如Splunk)集成方案实战 1
  4. Jquery自定义分页插件
  5. webpack 报错 path is not defind
  6. [裴礼文数学分析中的典型问题与方法习题参考解答]4.3.14
  7. 猜数字if循环(1)
  8. mysql dns反向解析_DNS练习之反向解析(示例代码)
  9. Django基础-安装配置
  10. git笔记(廖雪峰版本)