精华内容
下载资源
问答
  • 引用实际上就是指针
    千次阅读
    2017-10-22 23:12:44

    C语言中有指针和引用之分。指针表示一个变量中存放另一个变量的地址,通过地址可以另一个变量。引用指的是同一个地址,使用不同的名字来表示。

    在java书籍中一般都会说java中使用的都是引用。其实java中说的引用就是C里面的指针,只不过省略了*号。

    比如下面代码

    	public static void test(int[] a,int[] b)
    	{
    		int[] temp = a;
    		a = b;
    		b = temp;
    	}
    a和b的值发生了交换。

    	public static void main(String[] args) {
    		int[] a = {1,2,3};
    		int[] b = {4,5};
    		test(a,b);
    		System.out.println(Arrays.toString(a));
    		System.out.println(Arrays.toString(b));		
    	}
    a和b没有发生变化。说明形参不是实参不是同一块地址。

    更多相关内容
  • 首先, 在Java中, 不存在引用传递(也就是地址传递)一说, 全部都是值传递, 自然, 在使用对象时实际上都是使用的引用 Java语言明确说明取消了指针,因为指针往往是在带来方便的同时也是导致代码不安全的根源,同时也会...

    首先, 在Java中, 不存在引用传递(也就是地址传递)一说, 全部都是值传递, 自然, 在使用对象时实际上都是使用的引用 Java语言明确说明取消了指针,因为指针往往是在带来方便的同时也是导致代码不安全的根源,同时也会使程序的变得非常复杂难以理解,滥用指针写

    首先, 在Java中, 不存在引用传递(也就是地址传递)一说, 全部都是值传递, 自然, 在使用对象时实际上都是使用的引用

    Java语言明确说明取消了指针,因为指针往往是在带来方便的同时也是导致代码不安全的根源,同时也会使程序的变得非常复杂难以理解,滥用指针写成的代码不亚于使用早已臭名昭著的"GOTO"语句。Java放弃指针的概念绝对是极其明智的。但这只是在Java语言中没有明确的指针定义,实质上每一个new 语句返回的都是一个指针的引用,只不过在大多时候Java中不用关心如何操作这个"指针",更不用象在操作C++的指针那样胆战心惊。

    非也,基本类型数据存放在Stack中,存放的是数据。而产生对象时,只把对象的reference存放在stack中,用于指向某个对象,对象本身存放在Heap中。

    还有, 调用方法时传递的参数以及在调用中创建的临时变量都保存在栈(Stack)中,速度较快。其他变量,如静态变量、实例变量等,都在堆(Heap)中创建,速度较慢。另外,,依赖于具体的编译器/JVM,局部变量还可能得到进一步优化。

    从实现上来讲,引用可以理解为一种受限的指针,引用底层可以采用指针来实现,也可以采用句柄的方式实现。早期jvm一般采用句柄的方式,现在的jvm,比如sun的,IBM的,一般就是用指针来实现。

    不过从语言的角度来将,没有必要把java的引用和C的指针来比较。

    指针是可以进行与整数做加减运算的,两个指针之间也可以进行大小比较运算和相减运算。

    引用不行,只能进行赋值运算。

    当然有区别

    A a=new A();

    你可以 a=a+1;吗? 指针就可以

    注:更多精彩教程请关注三联设计教程栏目,

    展开全文
  • java引用指针

    千次阅读 2018-05-06 17:45:30
    我们知道,一个引用,比如说person p 等于new person,实际上就是p这个引用指向了这个对象实体,所以本质上就是指针。但是这个指针呢,它是安全的,受控制的,也就是说我们这个指针不能乱指,所以,这里面,比如说这...

    没有指针的java语言

           java语言中使用了引用代替了指针,引用实质就是指针,但它是受控的、安全的。我们知道,一个引用,比如说person p 等于new person,实际上就是p这个引用指向了这个对象实体,所以本质上就是指针。但是这个指针呢,它是安全的,受控制的,也就是说我们这个指针不能乱指,所以,这里面,比如说这个安全性包括了也就是它会检查这个指针是不是空的,是不是null,在这里面有没有指针运算,因为指针运算它很容易就把一个指针再加一点就指向别的地方了,很容易造成内存的错误访问,也不能访问没有引用到的内存,这样才使得那个自动垃圾回收成为可能,因为我们所有的这种引用,都是系统受控制的,都是能够管理的。

    C语言指针在java中的体现

        (1)传地址 -> 对象

            》引用类型,引用本身就相当于指针

                ~可以用来修改对象的属性,调用对象的方法(我们知道,对象本身是引用型)

            》基本类型:没有对应的

                ~如交换两个整数                                           ------C语言

                ~void swap(int x,int y){int t=x;x=y;y=t;}      ------C语言

                ~int a=8,b=9;swap(a,b);                              ------C语言

                ~一种变通的方法,传出一个有两个分量x,y的对象(构造一个class,这个class呢有x,y两个分量,那这样的话我们传一个引用过去,然后再把这个引用出来,我们就能得到这两个属性)              ------java

          (2)指针运算 -> 数组

                ~*(p+5) 则可以用 args[5]  


            (3)函数指针 -> 接口、Lambda表达式(接口本质上就是一个约定,那这里函数指针就是一个安全的约定,这个函数它叫什么名字?带什么参数?所以,它本质上是对那个函数指针的一个约定,而lambda函数是这种自动接口的更简洁写法,这个更简洁写法更能体现这个函数指针的概念)

                ~例:求积分,线程,回调函数,事件处理

             

               (4)指向结点的指针 -> 对象的引用

                 ~class Node{

                           Object data;

                           Node next;

                   }

                (5)使用JNI(Java Native Interface)

                    ~它允许java代码和其他语言写的代码进行交互

    展开全文
  • 智能指针有很多实现方式,android 中的sp 句柄类实际上就是google 实现的一种强引用的智能指针。我没有仔细看android sp 的实现方式,但其基本原理是固定的,现在我们从一个相对简单的例子来看智能指针的实现
  • 引用指针的区别

    千次阅读 多人点赞 2021-06-30 20:17:19
    引用和指针 指针:指针就是内存地址,指针变量是用来存放内存地址的变量.不同类型的指针变量所占用的存储单元长度是相同的,而存放数据的变量因数据的类型不同,所占用的存储空间长度也不同。 引用:引用不是新定义一个...

    一.引用和指针

    指针:指针就是内存地址,指针变量是用来存放内存地址的变量.不同类型的指针变量所占用的存储单元长度是相同的,而存放数据的变量因数据的类型不同,所占用的存储空间长度也不同。

    引用:引用不是新定义一个变量,而是给已存在变量取一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间.

    类型& 引用变量名= 引用实体; 且引用类型必须和引用实体是同种类型的.

    引用的主要用途是:修饰函数的形参和返回值.

    在C++语言中,函数的参数和返回值的传递方式有三种:值传递,指针传递和引用传递.引用具有指针的效率,又具有变量使用的方便性和直观性.

    实际上引用可以做的事,指针都可以做,为什么还要引用呢?

    引用体现了最小特权原则,即给予程序元素完成其功能的最小权限. 指针能够毫无约束的操作内存中的任何东西,尽管功能强大,但是非常危险.

    二.引用与指针的区别

    • 初始化:引用在定义时必须初始化,指针则没有要求(尽量初始化,防止野指针)
    • 引用在初始化引用一个实体后,就不能再引用其它实体,而指针可以在任意时候指向一个同类型实体
    • 没有NULL引用,但是有nullptr指针
    • 在sizeof中含义不同: 引用结果为引用类型的大小,但指针始终是地址空间,所占字节个数(32位平台占4个字节)
    • 引用自加即引用的实体增加1,指针自加即指针向后偏移一个类型的大小
    • 多级指针,但没有多级引用
    • 访问实体的方式不同,指针需要显式解引用,引用编译器自己处理
    • 引用比指针使用起来相对安全

    三.引用的底层原理

    在语言层面,引用的用法和对象一样.在二进制层面,引用一般都是通过指针来实现的,只不过编译器帮我们完成了转换.

    可以通过定义引用和指针变量进行调试观察:

    int main() {
    	int a = 10;
    	int *p1 = &a;
    	int& p2 = a;
    	return 0;
    }

    通过编译器调试观察反汇编语言发现,引用和指针的反汇编语言是一样的(编译器帮我们将我们完成了转换).

    底层实现:引用通过指针实现 (定义一个引用类型的变量相当于定义于一个指针类型的变量)

    语法: 引用是别名,不是指针,没有发生拷贝(目前可以认为引用是指针的一层封装,更加简单化的指针)

    注意:在语法概念上,引用就是一个别名,没有独立空间,和其引用实体共用同一块空间.但是在底层实现上实际是有空间的,因为引用是按照指针方式来实现的.

    展开全文
  • C++ 指针引用和指向引用指针

    万次阅读 多人点赞 2019-02-06 18:31:49
    使用指针的一个简单例子就是: int v = 1; int *p = &v; 需要预先强调的是没有指向引用指针!因为引用不是对象,没有地址。但是指向引用指针是什么形式呢? 是对一个引用进行如下取地址吗: int v = 1; ...
  • cs代码-引用类型代表delegate它实际上相当于C#中的函数指针原型与指针不同的是代表在C#是类型安全的
  • 指针引用详解

    千次阅读 2019-04-07 16:25:36
    文章目录一、指针引用的区别1、相同点2、不同点二、引用的概念详解1、引用作为函数参数2、引用作为函数返回值三、指针的概念详解1、指针作为函数参数2、函数指针3、指针数组和数组指针4、野指针/悬垂指针5、this...
  • 指针引用指针是一个变量,其值为另一个变量的地址。引用则可以看做是一个变量的别名。 #include <iostream> using namespace std; int main() { int a = 1; int *p = &a; cout << "a: " ...
  • 指针引用总结

    千次阅读 多人点赞 2018-10-15 22:58:07
    指针 若现在指针不知道指向,可以使用NULL,例如int *b = NULL; char *a = NULL;,但是使用的时候若指针指向的是数组或者字符串等,需要提前声明大小。若是int *,则不需要,直接将一个int类型的指针赋值给它即可。 ...
  • 引用指针和句柄的区别

    万次阅读 多人点赞 2020-12-15 08:38:00
    句柄是一种特殊的智能指针 。当一个应用程序要引用其他系统(如数据库、操作系统)所管理的内存块或对象时,就要使用句柄。句柄与普通指针的区别在于,指针包含的是引用对象的内存地址,而句柄则是由...
  • C++ 引用以及引用指针的区别

    千次阅读 2018-12-09 21:54:58
    前面整理了指针的用法,但是经常和指针拿来对比东西是引用。确实指针在使用的过程中会有很多的麻烦,比如赋初值、使用时判空、无效指针、深浅拷贝等等。在我看来引用指针的高级替代,它的使用规则规避了很多出错的...
  • C++基础知识 - 指针引用

    千次阅读 2022-01-25 17:59:20
    指针引用 指针变量的定义 int x = 666; int *p = &x; int* &q = p; //定义指针变量的引用 int* &q = p; 这叫做指针引用。 不要觉得看着复杂,其实一点也不复杂。 我帮你拆开来看: 按照C++程序员的...
  • c++引用指针的区别

    千次阅读 多人点赞 2019-01-31 20:09:02
    c++引用指针的区别  ★ 相同点:  1. 都是地址的概念;  指针指向一块内存,它的内容是所指内存的地址;引用是某块内存的别名。   指针的权威定义: In a declaration T D where D has the form * cv-...
  • 引用、常指针、常引用指针常量、引用常量

    千次阅读 多人点赞 2017-08-29 14:19:03
    引用的本质以及const的位置在语法和作用的区别
  • 指针引用的常规用法以及应用总结

    千次阅读 多人点赞 2020-08-03 01:07:36
    文章目录C++硬核:指针引用的常规用法以及应用总结指针的用法指针( pointer)简介:基本用法:指针的注意事项:指针的直接运算:指针的间接运算:变量的值,变量地址,指针地址和指针存放的地址之间的关系:空...
  • } 2.3:运行结果 2.4:解释 引用相当于是外部变量的别名,实际操作的就是该变量,即在函数内对该变量进行修改的话,在外部该变量也会相应被修改。 3、指针传参第一种,直接改变指向的值 3.1:指针传参方法 void ...
  • 指针引用的区别

    千次阅读 2018-11-04 12:07:30
    1、指针引用的区别 (1)引用必须被初始化(引用类型的初始值必须是一个对象),指针不必(但最好...引用本身就是目标变量的别名,对引用的操作就是对目标变量的操作。 (5)指针是一个对象,可以定义指向指针的...
  • C语言_指针引用的区别

    万次阅读 2022-05-06 22:11:15
    文章目录指针引用的区别0、前言1、指针指针变量和引用2、指针变量和引用变量的定义3、引用的用途4、引用指针的区别5、引用的底层原理6、代码示例6.1、示例程序16.2、示例程序2 指针引用的区别 0、前言 最近...
  • C++引用指针的区别

    千次阅读 多人点赞 2020-07-10 14:51:40
    引用是C++引入的重要机制(C语言没有引用),它使原来在C中必须用指针来实现的功能有了另一种实现的选择,在书写形式更为简洁。那么引用的本质是什么,它与指针又有什么关系呢? 1.引用的底层实现方式 引用被...
  • (超级详细)一文看懂指针、地址、引用

    万次阅读 多人点赞 2021-10-10 15:51:27
    超级详细!!!!一文看懂指针、地址、引用
  • /*括号是必须写的,不然就是指针数组;10是数组的大小*/1拓展:有指针类型元素的数组称为指针数组。2.通过指针引用数组元素的基本方法(1)小标法:a[i]。(2)指针法:* (a+i) 或 * (p+i) 或 p[i]。其中,a是数组名,p...
  • go -- 指针引用

    千次阅读 2020-04-05 22:25:57
    引用跟原来的变量实质是同一个东西,只不过是原变量的一个别名而已。如: int a=1;int *p=&a; int a=1;int &b=a; 1 2 3 上面定义了一个整形变量和一个指针变量p,该指针变量指向a的存储单元,即p....
  • 通过指针引用数组

    万次阅读 多人点赞 2018-06-13 20:49:32
    1、指针是什么? 为了说清楚什么是指针,必须先弄清楚数据在内存中是如何存储的,又是如何读取的。...内存区的每一个字节有一个编号,这就是“地址”,它相当于旅馆中的房间号。在地址所标志的...
  • 通过提出的抽象内存模型,基于给出的每种程序语句的迁移实现指针指向属性的可靠分析,根据得到的每个被引用指针的指向属性进而实现空指针引用缺陷的检测。通过对五个实际工程的检测结果分析表明,方法可充分检测出...
  • 指针引用的相同点和不同点

    千次阅读 2019-09-02 16:51:51
    引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。简单点说就是声明一个标识符为引用,就表示该标识符是另一个对象的外号。 三、引用指针的相同点 1、指针引用都可以优化传参效率 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 340,168
精华内容 136,067
热门标签
关键字:

引用实际上就是指针