一休:愚公,我又有困惑了。
愚公:说说看。
一休:我知道Java有8种基本类型,又发现对应有8个包装类(Warper),它们起到的作用是相同的,都表示一种类型的数。于是我就随手编了一句:
int i=Ineger(8);
结果编译出错了。
愚公:编程不能想当然。Java的面向对象的原则是数据和数据之上的操作要绑定在一起,这就是类,即引用数据类型。因此,类也是一种类型。Java本来可以不设置基本类型,只是为了提高操作效率,才设置了基本类型。基本类型和引用类型的最主要区别是:
基本类型的变量名是变量本身。
引用类型变量的名字是复杂数据的存储地点。
这两种类型的对应存储方式如图6所示。
一休:这个问题我明白一点的,例如基本类型表示简单数据,引用类型表示复杂数据。
愚公:那你举个例子看看。
一休:比如说,多少钱、多长、多高等这些简单的数据就可以用基本类型表示。较复杂的事物,就用引用类型表示,如汽车、动物等,这些事物包含很多特性和行为,也就是属性和操作。
愚公:可以这样理解。关于对象,有很多概念需要理解清楚。例如,下面的声明:
String s="Hello world!";
许多人都写过这样的语句,但是,我们到底声明了什么呢?一休,你回答一下。
一休:声明了一个String对象,内容是"Hello world!"。
愚公:这样的回答还是比较模糊,准确的回答是这个语句创建了一个字符串对象,另外它声明了一个指向对象的引用,名为s。它可以指向类型为String的任何对象,目前指向"Hello world!"这个String类型的对象。
一休:也就是说,我们声明了一个只能指向String对象的引用变量s,并且将s指向了字符串对象"Hello world!"。
愚公:是的,如果在刚才的语句后面再补充一句代码:
String string=s;
是不是又声明了一个新的对象呢?
一休:是的,声明了一个新的对象string。
愚公:不对,我们是声明了另外一个指向String对象的引用,名为string,并没有第二个对象产生,string还是指向原来的对象,也就是和s指向同一个对象。String类要弄清楚,因为这个类弄清楚了,许多类就好理解了。
一休:String类这么重要吗?
愚公:是的,因为这个类使用的频率很高,包含许多定制好的属性和方法,我们可以直接使用,而且这个类是final类,我们不能继承它,也不能继承和利用多态性修改它的方法。
一休:那我今后一定好好研究它!