1.String类
1. String类有两种实例化方式--》直接赋值和传统方法(利用构造方法对象实例化);
(1)String类中提供了一个共享模式-----》在JNM底层实际上会自动维护一个对象池,如果采用的直接赋值进行String类的对象实例化操作,那么该实例化对象就直接保存在这个对象池中,如果下次继续使用直接赋值的模式生声明String类对象,此时,对象池中若有指定内容,将直接进行引用,若没有,则开辟新的字符串对象后将其保存在对象池中以供下次使用。
使用对象池纯粹就是为了减少开销;
(2)使用构造方法就会开辟两块堆内存空间,并且其中一块会成为垃圾空间,也会对字符串共享产生问题。
2. 在String类中字符串内容的比较用equals()方法;
值得注意的是:在字符串比较是不能用==来进行比较,==本身是比较数值的,用==来比较两个对象,就是在比较两个对象所指空间的内存地址,而并非比较两个字符串的内容。
3. 所有的字符串常量都是String的匿名对象,而且匿名对象一定保存在堆内存中。
(1) 字符串常量不可变更,也就是说字符串一旦定义不能被改变,但是字符串对象的引用可以改变,这样会造成大量的垃圾空间。
(2) 字符串使用就采用直接赋值,字符串的比较就用equals()方法。
4. StringBuffer类--》由于String的不可更改特性,为了方便字符串的修改,java提供了StringBuffer类。
...在String中使用“+”来进行字符串连接,在StringBuffer类中需要用append()方法。
2. Object类
1. 在Java中,除了Object类,其他所有的类都是有继承关系的,默认会继承Object类,也就是说Object类可以接收所有类的对象。
2. 在进行对象直接输出的时候,默认输出的是一个地址编码,String类输出的却是字符串内容,那是因为String类
覆写了父类Object类的toString()方法。-----》由此我们得出,如果默认给出的toString()方法功能不足,就在需要的子类上覆写toString()方法。
toString()的核心目的在于取得对象信息。
3. String类对象的比较使用的是equals()方法,而此方法就是Object类的方法。
4. 接收引用类型数据
Object可以接收所有的引用数据类型--》类,接口,数组。
Object真正实现了参数的统一。
3.包装类
1. 包装类就是将基本数据类型封装在类中。
2. 将基本数据类型包装为一个类对象的本质就是使用Object类进行接收处理。
3. java为了开发方便,专门提供了包装类的使用,而对于包装类的使用,提供了两种类型:
(1) 对象型(Object的直接子类):Boolean,Character(char);
(2) 数值型(Number的直接子类):Byte,Double,Short,Long,Integer(int),Float;
4. 装箱和拆箱:(JDK1.5之后提供了自动拆装箱)
如:Interger x=55;
System.out.println(++x * 5);
5. 对于Integer num=?赋值 在-128—127之间,Integer对象是在IntegerCache.cache产生,会复用已有对象,这个区间内的integer值可以用==来进行判断,但区间之外的数据,都会在堆上产生,并不会复用已有对象,可使用equals来进行判断。