我们知道,java是面向对象语言,但不是完全的面向对象的,因为它还有包装类型,比如int的包装类型 Integer(这点应该和java历史有关系)像.net这种后来的语言是没有这个说法的。
基本数据类型对象包装类
*为了方便操作基本数据类型值,将其封装成了对象,在对象中定义了属性和行为丰富了该数据的操作
*用于描述该对象的类就称为基本数据类型包装类。
*byte Byte
*short Short
*int Integer
*long Long
*float Float
*double Double
*char Character
*boolean Boolean
查看String类源码:
我们可以看到String使用private final char value[]来实现字符串的存储,也就是说String对象创建之后,就不能再修改此对象中存储的字符串内容,就是因为如此,传统来说的话String类型是不 可变的(immutable)。
但在java 1.5之后我们可以通过反射来改变String的值
public class TestStringIsChange {
public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException {
String value = new String("hellow"); //这里它提示 new string是多余的
System.out.println("value1:" + value);
//从java1.5开始对象属性可以通过反射来修改
char[] chars = "words".toCharArray();
//获取string 类中的value字段
Field valueField = String.class.getDeclaredField("value");
//设置private字段可以被修改
valueField.setAccessible(true);
//把chars设置到value字段的内容
valueField.set(value, chars);
System.out.println("value2:" + value);
}
}