首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

【java基础】基本门类和引用类型

2012-12-18 
【java基础】基本类型和引用类型都知道,java里面定义变量的时候,都有两种方法。如定义一个整型变量:int a 1

【java基础】基本类型和引用类型
      都知道,java里面定义变量的时候,都有两种方法。如定义一个整型变量:

int a = 123;//1Integer b = new Integer(123);//2

      那么在实际应用中,应该使用那种方式呢?记得当时在做SSH整合框架开发时,在使用注解建Model中,曾使用了int这种方法定义了一些字段。当我在service层或者action层需要判断这字段是否为null时,就会出现错误。
      Java 提供两种不同的类型:引用类型和原始类型(或内置类型)。另外,Java 还为每个原始类型提供了封装类(Wrapper)。下面是java里面的原始类型和对应的封装类:
 boolean Boolean  char Character  byte Byte  short Short  int Integer  long Long  float Float  double Double

      引用类型和原始类型的行为完全不同,并且它们具有不同的语义。例如,假定一个方法中有两个局部变量,一个变量为 int 原始类型,另一个变量是对一个 Integer 对象的对象引用,如上面定义的a和b变量。
      这两个变量都存储在局部变量表中,并且都是在 Java 操作数堆栈中操作的,但对它们的表示却完全不同。(本文中以下部分将用通用术语堆栈代替操作数堆栈或局部变量表。)原始类型 int 和对象引用各占堆栈的 32 位。(要表示一个 int 或一个对象引用,Java 虚拟机实现至少需要使用 32 位存储。)Integer 对象的堆栈项并不是对象本身,而是一个对象引用。
      Java 中的所有对象都要通过对象引用访问。对象引用是指向对象存储所在堆中的某个区域的指针。当声明一个原始类型时,就为类型本身声明了存储。对象引用实例变量的缺省值为 null,而原始类型实例变量的缺省值与它们的类型有关。如以下代码:
int a =1;int b = 2;a = b;b++;//------------输出a和b-------------System.out.println("a ="+a+",b ="+b);Point c = new Point(0, 0);Point d = new Point(1, 1);c = d;c.setLocation(3, 3);System.out.println("c:"+c.toString());System.out.println("d:"+d.toString());

输出的结果是:
a =2,b =3c:java.awt.Point[x=3,y=3]d:java.awt.Point[x=3,y=3]

      这里a和b都在意料当中,而调用c.setLocation(3, 3)后,d的值也被修改了,就是因为在执行c=d后,c和d两个变量都指向了同一个实例,即c和d两个变量保存了相同的引用地址,当c.setLocation时,是实例的值改变了,而c和d保存的值没有变化。

热点排行