1. 关于java“变量”


是JAVA中不同于普通类的特殊类型(之后简称变量)。


字符类型char,布尔类型boolean以及数值类型byte、short、int、long、float、double





     2.“变量”(基本类型)与“对象”


     基本类型和一般的类的差别就在于实例的储存机制。 一个能够实例化的类(之后简称为普通类)可以通过new关键字在


堆区(heap)创建一个该类的实例,而它就被称为对象(objects),相对的Java也正是通过操纵对象,来操纵储存单元里的内容。


     但是当需要创建一个非常小,非常简单的“变量”(varibles)时,再用new到堆区创建对象就不是个很好的选择了。


     Java选择了类似c和c++那样的处理变量的方式:当你定义一个变量,它将会被自动创建在栈区(stack)上 ,并且它并不是一个引用(refences),你找到该变量的标识符(indentifier),你就直接找到了它的值。


    3.通过引用来操作对象


     在上一条中提到了引用(refences),这是一个和C++中的引用相似的概念。
     Java将一切都当作对象来处理,然而实际上你声明和操作的那个标识符(identifier)是一个引用。


     在《ThinkingInJava》作者打了一个有趣的比方:对象好比一台电视机,而引用则是一个遥控器。当你让电视机改变频道或者音量的时候,你认为你是在操纵这台电视,但实际上你操纵的是遥控器。同时你也可以带着遥控器在屋里闲逛,并且可以在任何地方操纵电视机,而不用背着它乱跑。


     那么之前提到的‘’变量‘’则可以认为是功能简单到不需要一个遥控器的物件,例如一个杯子一支笔,你同样可以带着它本身乱跑。
   

3.通过引用来操作对象


混淆引用(refences)和指针(pointers)


     实际上Java不存在指针的概念。在C++中,指针指向的是某一个内存地址,当指针出错时,所导致的后果是不可预知的(甚至可以直接影响到操作系统)而为Java为了简化和封装去掉了这一直接操作底层的途径。


     引用对应的并非底层的内存地址,而是更为抽象的对象(object)。


     举个例子:当你操作引用的时候就像是去邮局寄信,收信的对象是收信人,而非收信地址,当没有收信人的时候,邮寄就是失败的。


             创建一个对应的对象(objects)-“电视机”


     在C++中必需先有对象,才能声明引用。而在Java里,你可以先声明一个引用,但在给它发消息之前,你必须给它关联一个对象。通常使用new关键字在堆区为它创建一个新的对象。


     当你给一个没有关联对象的引用发消息时,就会报出一个运行时错误(不存在电视机),所以最安全的做法是在声明一个引用时就给他创建一个对象。


   你操作的是一个引用(refences)-“遥控器”


     时刻注意在操作对象的时候你所操作的实际上是一个引用(遥控器),的确通过引用可以让对象执行很多操作,但不能将其与对象本身混为一谈,尤其是一些基本类型的包装器类,切不可将其直接当成一个变量来用,否则很容易发生一些意料之外的事。
     例如

integer a = integer(1);
integer b = integer(2);
if(a==b){
    //结果是false,if内语句并不会执行
}

    具体关于引用的操作符误用而导致的一些错误在下一篇中再记。