(一)基本数据类型包装类
回顾:
基本数据类型并没有继承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 //对象地址不能变,这样的操作是非法的!