学习啦 > 知识大全 > 知识百科 > 百科知识 > 变量和对象的区别是什么意思

变量和对象的区别是什么意思

时间: 肖阳1034 分享

变量和对象的区别是什么意思

  对象和变量这两个概念莫要搞乱,颈是颈,椎是椎,虽然两者都对应着一块内存,但是从不同的角度去理解内存就会产生不同的意义。下面就让学习啦小编来为大家介绍一下吧,希望大家喜欢。

  变量与对象

  变量:所谓变量就是一种定义,通过定义编译器将会开辟一段空间,并将这段内存空间和这个变量的名字捆绑在一起。从这个意思去理解,其实说白了:变量名就是内存在代码中可视化的一个符号。也就是说,如int a,a只是内存中某段地址在代码中可视化的一个符号,a本身作为符号并不占用空间,占用空间的是a所对应着的那个变量,通过a这个符号我们可以引用到该变量在内存中的位置。就好比是人和名字的关系,人作为一个真真正正的实体,是占用地球的物理空间的,是一个真实的存在,而这个人的名字只是代表了这个人的一个符号,本身并没有占用地球的物理空间,只是在他妈把他生下来的时候,把人这个实体和名字捆绑在了一起,因此,我们引用这个人的名字的时候,就等于我们找到了这个人。

  对象:对象就是内存中一段有类型的区域。从这句话的描述上来看,对象至于变量,似乎更关注的是这对内存的类型,而不是名字。不能说变量就是对象,或者对象就是变量,严格来说,对象就是用来描述变量的。一点佐证是,C++中的临时变量的概念,如传参时生成的临时变量,该变量在内存中存在,但是是没有名字的,因此在代码中无法可视化,我们就无法通过名字去引用这个临时变量。

  两者的区别与联系

  从上面的两个描述中我们可以看到,两者都是用来描述一段内存的,但是是从不同的角度去描述:

  变量更强调的是变量名这个符号的含义,更强调名字与内存的联系,而不必关注这段内存是什么类型,有多少字节长度,只关注这个变量名a对应着某段内存。

  而对象的描述更强调的是内存的类型而不在乎名字,也就是说,从对象的角度去看内存,就需要清楚这段内存的字节长度等信息,而不关注这个对象在代

  举例:

  int a;

  如果我们说a是个变量,那我们关注的只是a这个名字对应着一块内存,当我们引用a时,我们能明确的知道我们引用的是a这个名字所对应的内存空间,而不是别的,也不去关注这个a的内存是个int啊char啊之类的什么类型。如果我们说a是个对象,则我们需要知道这个对象具体是什么类型,当我们引用并操作a的时候,就能根据类型信息做一些符合类型语义的操作,而不是暴力访问内存,任意解析内存中的数据码中是否有一个变量名来引用到这段内存。

  对象与对象变量

  要想使用对象,就必须首先构造对象,并指定其初始状态。然后,对对象施加方法。

  在Java程序设计语言中,使用构造器(constructor)构造新实例。构造器是一种特殊的方法,用来构造并初始化对象。下面看一个例子。在标准Java类库中包含一个Data类。它的对象将描述一个时间点,例如"December 31,1999,23:59:59 GMT".

  构造器的名字应该与类名相同,因此Data类的构造器名为Data。要想构造一个Data对象,需要在构造器前面加上new操作符,如下所示:

  new Data()

  这个表达式构造了一个新对象。这个对象被初始化为当前的日期和时间。

  如果需要的话,也可以将这个对象传递给一个方法:

  System.out.println(new Data());

  相反,也可以将一个方法应用于刚刚构造的对象上。Data类中有一个toString方法。这个方法将返回日期的字符串描述。下面的语句可以说明如何将toString方法应用于新构造的Data对象上。

  String s=new Data().toString();

  在这两个例子中,构造的对象仅使用了一次。通常,希望构造的对象可以被多次使用,因此,需要将对象存放在一个变量中;

  Data birthday=new Data();

  在对象与对象变量之间存在着一个重要的区别。例如,语句

  Data deadline;//deadline doesn't refer to any object

  定义了一个对象变量deadline,它可以引用Data类型的对象。但是,一定要认识到:变量deadline不是一个对象,实际上也没有引用对象。此时,不能将任何Data方法应用于这个变量上。语句

  s=deadline.toString();

  将产生编译错误。。

  必须首先初始化变量deadlin.这里有两个选择。当然可以用新构造的对象初始化这个变量:

  deadline=new Data();

  或者让这个变量引用一个已存在的对象:

  deadline=birthday;

  选择,这个两个变量引用同一个对象

  一定要认识到:一个对象变量并没有实际包含一个对象,而仅仅引用一个对象。

  在Java中,任何对象变量的值都是对存储在另外一处的一个对象的引用。new操作符的返回值夜是一个引用。下列语句:

  Data deadline=new Data();

  有两个部分。表达式new Data()构造了一个Data类型的对象,并且它的值是对新创建对象的引用。这个引用被存储在变量deadli中。

  可以显式地将对象变量设置为空(null),表明和这个对象变量目前并没有引用任何对象。

  deadline=null;

  ...

  if(deadline!=null)

  System.out.println(deadline);

  如果将一个方法应用于一个值为null的对象上,就会产生运行错误。

  birthday=null;

  String s=birthday.toString();//runtime error!

  变量不会自动地初始化为null,而必须对他们进行初始化,调用new或将它们设置为null。
猜你喜欢

1.值类型和引用类型的区别

2.Java中变量和常量之间的区别

3.什么是对象数组

4.类方法和实例方法的区别

5.什么是面向对象

2908547