java中引用的概念(JAVA的引用调用)

Java中为什么没有指针?

我们都知道Java与c/c 有个显著的区别就是c/c 有指针的使用,而Java中没有用到指针。之所以Java没有指针的使用(没有显示的使用指针,内部实现机制肯定是有指针的),是因为Java作为一个纯面向对象的语言,程序员基本不用关心内存的分配与释放,这些操作都被虚拟机拿去做了,如果说虚拟机已经可以帮助实现,同时指针操作由人操作是容易造成重大错误的,因此没有必要引入指针操作。

什么是Java的对象引用和对象?

这一问题,很多书上都没有解释清楚甚至有的书省略了,理解这个对于学习Java而言非常的重要。

比如说:

Student a=new Student("小明");

这里的a就是一个Student对象的引用,是一个引用,而这里的new Student("小明")实际上是一个对象,也就是说这个表达式是表示:对象的引用a指向创建的对象new Student("小明")。

在Java中都是通过引用来操作对象的。如果一个对象被多个引用变量引用,则引用变量将共同影响这个变量本身。同样,一个引用变量也可以志向不同的对象,但是同一时刻下只能指向一个对象。

Java中的对象和C 中的对象有什么区别?

首先就存储位置而言。Java中的基本数据类型变量和引用变量是存放在栈中(生命周期很短),而创建的对象则是放在堆中(生命周期长),由于创建对象要调用构造器会比较费开销,放在不易销毁的堆中等需要被引用变量引用时再拿出来用。C 中new后的对象一样也是在堆中存放。

下面看两个个例子:

// Java创建对象的存储方式

Student a; // 这个引用变量存放在栈中,是一个空引用,没有在栈中开辟Student的空间

a=new Student(); // 栈中的引用变量指向了在堆中开辟实际空间的Student对象

// C 创建对象的存储方式

Student A; // 这个Student类型的变量A在栈中创建,并且还在栈中给其分配了Student大小的空间

Student *a; // 这个指针变量本身存的是地址,存储在栈中

a=new Student(); // 在堆中申请空间,过后需要手动释放

其次就创建方式而言。Java中万物皆对象,而Java中都是通过引用来操作对象的,Java是区分值类型和引用类型,用户自定义的类型都是引用类型,而值类型和引用类型在很多地方不可混用(比如说为什么非要包装类),Java 的引用更像是C 的指针。C 可不是万物皆对象,即使他有着面向对象的思想,C 可没有引用类型和值类型的概念,C 有普通类型和指针类型。

再次就访问控制级别而言,二者都有public,protected,private三级访问控制级别,Java还有default包访问控制级别,C 有友元继承。

还有就基类而言,Java根基类是Object,C 没有根基类。

然后就析构而言,C 有析构函数,Java中没有析构方法,有一个终结的方法,因为有gc。能自己手动析构,所以C 才没有什么finally,而Java会有。

再然后就泛型而言,C 模板采用代码生成技术,运行时保留泛型信息,而Java采用类擦除技术,类型信息在运行时就没了,实质上是自动进行了类型的转化。

最后可以说C 代码运行非常依赖于程序员的编写操作,而Java代码的运行更依赖于虚拟机的操作。当然还有其他不同,暂未列出。

C 既然有指针为什么还要引用?C 指针类型和引用的区别?

C 还需引用的原因:

C 的指针其实是很危险的东西,但却无比的灵活,之所以有了指针却还要引用的原因是C 中有一个叫运算符重载的东西。(运算符重载往后的博文会写到)

C 指针和引用的区别:

引用是变量的别名,指针是变量的地址;引用不可独立存在,定义时必须初始化,指针则不是;引用在寿命期内不可在定义为其他变量的引用,而指针却可以指向其他变量;不能引用一个数组,但是有数组的指针;没有引用的引用,却有指针的指针。

(0)

相关推荐

  • 什么是JAVA中的引用? JAVA引用的概念

    引用的概念,如果一个变量的类型是 类类型,而非基本类型,那么该变量又叫做引用.其实GC时主要看这个对象是否有引用指向该对象.按照这种引用的强弱的关系, 从JDK1.2版本开始,把对象的引用分为四种级别 ...

  • java中对象和对象的引用

    在Java中,有一组名词经常一起出现,它们就是"对象和对象引用",很多朋友在初学Java的时候可能经常会混淆这2个概念,觉得它们是一回事,事实上则不然. 操作方法 01 1.何谓对 ...

  • Java中注解(Annotation)的根本概念

    操作方法 01 Java中注解(Annotation)的根本概念啥是注解(Annotation): Annotation(注解)即是Java供给了一种元程序中的元素相关 任何信息和着任何元数据(met ...

  • java 中堆和栈的区别方法

    一直以来对java中堆和栈都有点模糊:现在终于搞明白啦 特点: 1. 栈的特点是 : 容量小 速度快 适合存放小型数据 如基本数据类型和对象类型的引用 在栈中变量直接指向存放变量值的空间 对于对象引用 ...

  • java中继承到底指继承的什么

    java中的继承 操作方法 01 1.java类中继承的关键字是extends,一般说子类继承了父类 例如:父类是Animals.java       子类是Cat.java 声明子类的写法是:pub ...

  • java中的数组怎么学习

    java中的数组是存储多个变量元素的东西,这多个变量的数据类型要一致.数组可以存储基本数据类型,也可以存储引用数据类型.数组的格式:1.数据类型[]数组名             2.数据类型数组名[ ...

  • Java中String 和StringBuffer的区别

    先看下面的这个例子,读懂这个例子,你就理解了. publicclass Test { publicstaticvoid stringReplace (String text) { text = tex ...

  • java中equal与==的区别

    介绍一下java中==和equals方法的区别.在初学java时需要弄清楚这个问题,以免在今后在编码过程中出现一些低级错误. 操作方法 01 首先,在eclipse中运行图示所示代码,通过结果对&qu ...

  • 怎样区分java中的基本数据类型和引用类型?

    怎样区分java中的基本数据类型和引用类型? 操作方法 01 1.java中基本数据类型一共有8个. 基本数据类型在内存中只有一块空间,里面存着数值. 例如:int a=0;就是基本数据类型. 02 ...