Java中“指针”的解释以及对“引用”的理解

初学Java面对对象编程,对于一些概念还真的有点难以理解,主要是因为不由自主的联系到以前学过的C语言知识,时不时的影响着自己对Java语言的认识,如今自己对于Java的一些概念解释和理解记录下来,以便于以后回顾:

一、引用:

在Java语言的教材中关于创建对象格式是这样规定的:

类名 引用变量 = new 类名();

对于这句话的解释是:创建一个对象,将对象的地址赋值给引用变量,此时变量就持有了对象的引用;而此时我们就可以通过引用变量来访问对象中的所有成员。需要注意的是:引用变量存放的位置是栈内存,对象存放的位置是堆内存;

举一个不是太恰当的例子:就像在电脑上下载了一个软件,把软件安装到了某一个硬盘下的某一个文件夹中,为了能够方便的打开这个软件,都会在桌面上创建一个快捷方式,若要打开软件,直接在桌面上双击软件快捷方式即可,而不是每一次使用的时候都到安装软件的文件夹下找 .exe 文件打开它,显然这种情况就相当于Java中的“引用”。快捷方式和 .exe文件的位置是不一样的,通过快捷方式打开软件。

说到引用了,再提一下C、C++语言中的引用概念:

例如 : &b=a;此时变量b就持有了对变量a的引用,但是a,b变量的地址是相同的,这不同于Java语言中对象的引用。

我认为:不管是对于Java还是C、C++,可以把“引用”理解成“别名”,只是他们的引用变量在各自的语言中存储地址有些偏差罢了。

二、指针:

自从学了C,C++语言之后,再学Java语言发现一个问题:Java中也是含指针的。(我不要你觉得,我要我觉得)

看一个例子: Person p= new Person();

实例化对象Person类;把对象的地址赋值给了变量p,此时变量p指向了对象,那么这不就是C、C++中的指针吗,和C++、C里面的指针定义很像,没毛病。所以呢,如果把p变量理解成指针变量,我认为也是可以的。

总的来说吧,我认为每个语言有每个语言的特色,不应该拿看待C、C++语言的眼光来过度看待Java,如果要是先学的Java语言,再学习C++语言,那会不会就把C++语言中的“指针”就给理解成Java中的“引用”了呢!

Java中“指针”的解释以及对“引用”的理解的更多相关文章

  1. Java中到底是值传递还是引用传递?

    Java中到底是值传递还是引用传递? 我们先回顾一下基本概念 实参和形参 参数在编程语言中是执行程序需要的数据,这个数据一般保存在变量中.在Java中定义一个方法时,可以定义一些参数, 举个例子: p ...

  2. Java中带包(创建及引用)的类的编译

    Java中带包(创建及引用)的类的编译与调试 java源程序的编译大家都知道,也就是cmd中到源文件所在目录下javac **.java即可,当程序中有包声明还能简简单单的直接javac **.jav ...

  3. java中的参数传递——值传递、引用传递

    参数是按值而不是按引用传递的说明 Java 应用程序有且仅有的一种参数传递机制,即按值传递. 在 Java 应用程序中永远不会传递对象,而只传递对象引用.因此是按引用传递对象.Java 应用程序按引用 ...

  4. java中的正则表达式捕获组与引用的概念

    今天群里有个人问,怎样用增则表达式匹配三角形的三边,其实只是要匹配三个数字而已,如 301 402 503 开始认为很简单,我就写了一个   "(([1-9]\\d?)\\s){2}$2&q ...

  5. java中的强,软,弱,虚引用

    引用的应用场景 我们都知道垃圾回收器会回收符合回收条件的对象的内存,但并不是所有的程序员都知道回收条件取决于指向该对象的引用类型.这正是Java中弱引用和软引用的主要区别. 如果一个对象只有弱引用指向 ...

  6. 关于java中指针的概念

    今天寡人遇到一个问题,扫描非关系数据库中的图(由node和rel组成),将其转化成由寡人自定义的gnode和gedge组成的图. gnode类包含结点的id,label和包含此gnode的gedge的 ...

  7. Java中名词的解释

    在上一篇中说到了Java的四大特性,里面出现了很多名次,包括以后学习Java中也会出现很多常用到的名次,对初学者来说可能不知道是什么意思,或者是对这些刺耳的理解不是特别透彻,这里我就我自己的理解来解释 ...

  8. Java中的软(弱)引用

    一.Java中的强.软.弱.虚引用 在JDK中我们能够看到有一个java.lang.ref的包.这个包中就是Java中实现强.软.弱.虚引用的包,例如以下: PhantomReference 虚引用: ...

  9. Java中String、StringBuffer、StringBuilder区别与理解

    一.先比较String.StringBuffer.StringBuilder变量的HashCode值 使用System.out.println(obj.hashcode())输出的时对象的哈希码, 而 ...

随机推荐

  1. mysql-安装(windows版本)与登录

    安装mysql 1.MySQL版本 mysql-5.6.35-winx64.zip 2.首先解压到安装目录 3.修改配置文件 复制my-default.ini 重命名为my.ini 然后修改mysql ...

  2. Python Pygal 模块安装和使用你get了吗?

    Pygal 是另一个简单易用的数据图库,它以面向对象的方式来创建各种数据图,而且使用 Pygal 可以非常方便地生成各种格式的数据图,包括 PNG.SVG 等.使用 Pygal 也可以生成 XML e ...

  3. Tapdata 实时数据融合平台解决方案(四):技术选型

    作者介绍:TJ,唐建法,Tapdata 钛铂数据CTO,MongoDB中文社区主席,原MongoDB大中华区首席架构师,极客时间MongoDB视频课程讲师. 常见搭建数据中台的技术产品 数据中台包括: ...

  4. Java变量和Scanner类

    1.变量的分类1)按数据类型分类   详细说明: 1. 整型:byte(1字节=8bit) \ short(2字节) \ int(4字节) \ long(8字节)   ① byte范围:-128 ~ ...

  5. VS无线振弦采集仪的常见问题

    1 无法开机( 1)检查电源连接是否正确,电压范围应为 DC10~24V,输出能力不低于 2A, 正负极连接正确.若电池极性接反,即便未进行过开机操作也会导致设备永久性损坏.( 2)若使用电池供电,则 ...

  6. ooday08 Java_多态_向下强制转型

    笔记: 多态: 表现: 同一个对象被造型为不同的类型时,有不同的功能 --对象的多态:我.你.水......------所有对象都是多态的(明天体会) 同一类型的引用指向不同的对象时,有不同的实现 - ...

  7. Running Median_via牛客网

    题目 链接:https://ac.nowcoder.com/acm/contest/28886/1002 来源:牛客网 时间限制:C/C++ 5秒,其他语言10秒 空间限制:C/C++ 65536K, ...

  8. 搭建一个完整的K8S集群-------基于CentOS 8系统

    创建三个centos节点: 192.168.5.141 k8s-master 192.168.5.142 k8s-nnode1 192.168.5.143 k8s-nnode2 查看centos系统版 ...

  9. 日期字符串转为java.sql.Date

    日期字符串转为java.sql.Date类型 问题引出:在将一个日期字符串通过sql语句,插入到数据表的日期字段(字段类型是DATE),时遇到一个问题,如何将一个日期字符串转成java.sql.Dat ...

  10. vue项目导航菜单实现

    vue项目导航菜单问题 目标:横向菜单点击跳转,颜色变换,刷新可保持状态 // 模板template中通过循环菜单列表生成,动态类名改变颜色 <li v-for="(item, ind ...