疯狂JAVA讲义(第六章)学习笔记

一:简单零碎的知识汇总

1)疯狂JAVA讲义(第六章)学习笔记

2)将字符串转换为基本类型的值主要有两种方法:

      1.利用包装类的parseXxx(String s)的静态方法(除Character之外的所有包装类都提供了该方法)。

      2.利用包装类的valueOf(String s)的静态方法。

3)将基本数据类型转换成字符串可以使用String类的valueOf()静态方法。也可以将其与""进行连接运算。

4)所有包装类都有一个静态的compare(xxx val1,xxx val2)方法,这个方法可以比较两个基本类型值的大小,包括比较两个boolean类型(true>false)。

疯狂JAVA讲义(第六章)学习笔记

5)toString()方法是Object类里的一个实例方法,所有的java类都是Object类的子类,因此所有类都具有toString()方法。如下两行代码输出相同:

疯狂JAVA讲义(第六章)学习笔记

6)==运算符比较两个基本数据类型时,只要两个变量的值相同(不一定要求数据类型严格相同),就会返回true。

     ==运算符比较两个引用类型变量时,只有它们指向同一个对象时才返回true,==不可用于比较类型上没有父子关系的两个对象。

疯狂JAVA讲义(第六章)学习笔记

7)关于常量池。疯狂JAVA讲义(第六章)学习笔记

疯狂JAVA讲义(第六章)学习笔记

8)equals()方法是Object类所有的一个实例方法,因此所有引用变量都可调用该方法来判断是否与其他引用变量相等。但使用这个方法判断两个对象相等的标准与==没有区别,同样要求两个引用变量指向同一个对象才会返回true。如果希望采用自定义的相等标准,则可采用重写equals()方法来实现。String类已经重写了Object的equals()方法

二:易混淆出错的难点汇总

1)包装类的实例与数值类型的值进行比较时,直接取出包装类实例所包装的数值进行比较。如下图所示

疯狂JAVA讲义(第六章)学习笔记

      两个包装类的实例进行比较时,只有两个包装类的引用指向同一个对象时才会返回true。如下图所示

疯狂JAVA讲义(第六章)学习笔记

      两个由自动装箱生成的Integer实例进行比较时,会出现如下特殊情况:

疯狂JAVA讲义(第六章)学习笔记

      这与如下Interger类的源代码设计有关,从下面源码可知系统将-128~127之间的整数自动装箱成Integer实例,并放入了名为cache的数组中缓存了起来,所以当-128~127的整数自动装箱成Integer类型时,实际上总指向已缓存的对应数组元素。但超过这个范围的整数自动装箱成Integer类型时,则系统总是重新创建一个实例。因此会出现上图所示结果

疯狂JAVA讲义(第六章)学习笔记