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

Python011

变量和对象的区别是什么意思,第1张

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

变量与对象

变量:所谓变量就是一种定义,通过定义编译器将会开辟一段空间,并将这段内存空间和这个变量的名字捆绑在一起。从这个意思去理解,其实说白了:变量名就是内存在代码中可视化的一个符号。也就是说,如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. 什么是面向对象 

Java中数据类型分为两大类,是基本类型和对象类型。相应的,变量也就有两种类型:基本类型和引用类型。基本类型自然不用说了,它的值就是一个数字,一个字符或一个布尔值。引用类型,可是引用类型呢?它是一个对象类型的啊,值是什么呢?它的值是指向内存空间的引用,就是地址,所指向的内存中保存着变量所表示的一个值或一组值。很好理解吧,因为一个对象,比如说一个人,不可能是个数字也不可能是个字符啊,所以要想找它的话只能找它的地址了。