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

都知道,java里面定义变量的时候,都有两种方法。如定义一个整型变量:
int a = 123;//1
Integer 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 =3
c: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保存的值没有变化。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值