数据类型转换,常量池,及final关键字

(一)基本数据类型包装类

回顾:

  基本数据类型并没有继承Object类。所以提供了基本数据类型包装类

  其中构造方法中可以以字符串的形式传入。

 1.基本数据类型包装类对象和基本数据类型之间的转换:

 例如:

  Float f = new Float("3.14f");
  Boolean b = new Boolean("true");

  float ff = f.FloatValue();
  boolean bb = b.BooleanFloat();

  2.字符串和基本数据类型之间的转换:

 字符串转化数据类型:

  eg:
  基本数据类型引用 基本数据类型 =包装类.prasexxx("");

   float f = Float.parseFloat("");

 基本数据类型转成字符串:

   String s = String.valueof(基本数据类型);

 //通过上述方法实现装箱和拆箱。

 

 3.jdk1.5后提供自动装箱拆箱

  Float f = 3.14;
  float ff = f

注意:Integer数据类型在-127-127之间的值是存储在常量池中的。 超过值才会分配栈内存。


(二)String字符串的缓存机制

 判断相等有两种方式

 1(==):

  用于判断两个基本数据类型是否相等,如果判断对象的话则是判断对象引用的地址是否相同,即是否是同一个对象

 2(equse):

  Object类中的方法。可以进行重写。

 用于判断两个对象是否相同,两个字符串则是判断两个字符串内字符串的字符排列顺序是否相同。

 这里要注意:当字符串的值是编译时确定的时候,字符串的值是缓存在常量池中的,而字符串对象是存储在堆内存中的.

eg:

   String s1="我是字符串"//缓存在常量池中
   String s2=new String(我是字符串);//存储在堆内存中

 所以以上两个引用指向的是不同的对象,因此==的结果是false

 常量池中只会存在一个原本,不会存在多个常量副本。因此当编译时相同的常量值,指向的是同一个地址。


  String s1="我是字符串";
  String s2= "我是"+"字符串";

 上面这两个s1==s2 输出的是true

 因为在常量池中 他们指向的是一个对象

而:

   String s3 = "我是";
   String s4 = "字符串";
   String s5 = s3+s4;
 s1 == s5输出的则是false 因为s5是编译时不确定的量无法指向常量池.

(三)final关键字的用法

final修饰类:无法被继承,final修饰方法不能被重写,但是可以被重载,

final修饰变量分为两种:

final修饰的变量只能被赋值一次;由于赋值方式机制的不同因此分为两种情况:

成员变量:由于分配内存后系统自动赋初值,这样使得此变量失去意义,因此在定义成员变量时需要赋值,或者在代码块,构造器中对其赋值
局部变量:没有赋值,系统并不为它分配,栈内存,所以可以定义时可以赋值也可以不赋值,但是,形参作为局部变量,系统当将形参传递时已经赋值了所以,形参不能再次改变.
宏变量:一个变量被final修饰且是编译时确定的。那么这个变量可称为宏变量。宏变量可以将 引用指向常量池。


注意:final修饰的引用型变量,只是引用的对象地址是不可变的,即一直引用的是一个对象,但对象是可变的

eg:

  final List marrayList=new ArrayList();
  marrayList.add("");  //对象是可以改变的
//marrayList=null   //对象地址不能变,这样的操作是非法的!



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值