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. VisonPro · 视觉工具列表说明

  2. Python递归函数的定义和几个小例子

    递归函数 (1)什么是递归函数? 我们都知道,一个函数可以调用其他函数.如果这个函数在内部调用它自己,那么这个函数就叫递归函数. (2)递归函数的作用 举个例子,我们来计算阶乘 n! = 1 * 2 ...

  3. W10修改被改的默认打开文本方式

    今天不小心给默认方式打开点错了,身为处女座的我有洁癖非要非恢复过来,这是找到的 原文操作出处:win10系统如何还原文件默认打开方式?win10设置文件默认打开方式的方法 -Win7系统之家 (win ...

  4. NC25025 [USACO 2007 Nov G]Sunscreen

    NC25025 [USACO 2007 Nov G]Sunscreen 题目 题目描述 To avoid unsightly burns while tanning, each of the \(C\ ...

  5. jdk8 hashmap 链表resize 源码分析

    重点看这部分代码 for (int j = 0; j < oldCap; ++j) { Node<K,V> e; if ((e = oldTab[j]) != null) { old ...

  6. 【Azure 存储服务】Hadoop集群中使用ADLS(Azure Data Lake Storage)过程中遇见执行PUT操作报错

    问题描述 在Hadoop集中中,使用ADLS 作为数据源,在执行PUT操作(上传文件到ADLS中),遇见 400错误[put: Operation failed: "An HTTP head ...

  7. day09 集合排序_Collection接口与Collections工具类

    集合的排序 java.util.Collections类 Collections是集合的工具类,里面定义了很多静态方法用于操作集合. Collections.sort(List list)方法 可以对 ...

  8. ooday06 内部类

    笔记: 成员内部类:应用率低,了解 类中套类,外面的称为外部类,里面的称为内部类 内部类通常只服务于外部类,对外不具备可见性 内部类对象只能在外部类中创建 内部类中可以直接访问外部类的成员(包括私有的 ...

  9. 74HC595驱动(并转串,fpga与时钟匹配,fpga与外部芯片的连接注意事项)

    上一次设计的动态扫描数码管显示电路模型如上,这是一个32位并行数据[31:0]disp_num选通输出并行数据[7:0]select和[7:0]段选的电路.因此需要输出16个信号 而在开发板上的电路与 ...

  10. Centos7借助docker部署mysql,提供远程链接服务

    Centos7 借助docker部署mysql,并提供远程连接服务 安装docker 运行docker 注意安装docker和运行docker的步骤很简单,可以参考我学习docker的笔记 docke ...