悬赏200分求java类和基本数据类型-两种不同的观点,研究2天了。

来源:百度知道 编辑:UC知道 时间:2024/05/09 09:22:49
1有人教我:int是基本数据类型,同时也是一个类,因为java一切皆对象。
2又有人教我:java 基本数据类型是基本数据类型,类是类,2个不同的概念,鄙人觉得2种都有合理的说法。
认为第一种合理的理由是,在C#中,int被当成结构,结构间接继承Object,int a=5;可以直接a.toString();java书没说明int本质是什么,只说它是基本数据类型,我想,java里int和C#的int一样,都是继承Object。
认为第二种合理的理由是,在java里,int a=5;a.toString();是错误的,错在a不能点出toString(),可见a不是一个类 类型,只是个基本数据类型。
回答时,请注意说明基本数据类型是什么,java中包装类我已经很明白使用了,可以不提,java里只说了int,float等是基本数据类型。C#里对基本数据类型说的很清楚,int ,float是个结构,间接继承Object,是这么定义的public struct Int32()。int乃Int32的简写。
从大家的回答中,我知道了许多。我现在把我知道的总结一下:java里int是单独拿出来定义的,并不属于类,C#里int 把它定义成了一个结构类似于public struct int,在C#里,int作为结构,继承了System.ValueType类,ValueType继承了Object类,int间接继承了Object类,所以我们int a=5这里a可以调用Object类下的ToString()方法,a.ToString(),java里用a.toString()是错的,因为前面说过,java的int是单独定义的,其实这也是java的一个缺点,java靠的是包装类Integer来实现调用toString()这一方法的,C#高明的地方是把int定义成结构,可以直接调用方法,不必像java一样使用包装类,同时这也是C#的msdn中找不到表示整型Integer类的原因(注意有Integer枚举,但与整型没多大关系)。在说明过程中没涉及到 值类型和引用类型。因为对于堆杖和堆我能理解了。如有错误,恳请指正!谢谢

听听专家怎么说吧:

Bruce Eckel,Java编程思想的作者

Bruce 说,“尽管Java是基于C++的,但是相比之下,Java的一种更“纯粹”的面向对象程序设计语言。你会体会到Java中(几乎)一切都是对象!”

因为特例就是:基本类型
“在程序设计中经常用到一系列类型,它们需要特殊对待。可以把它们想象成“基本”类型。之所以特殊对待,是因为new将对象存储在“堆”里,故用new创建一个对象----特别是小的、简单的变量,往往不是很有效。因此,对于这些类型,Java采取与C++和C相同的方法。也就是说,不用new来创建变量,而是创建一个并非是引用的“自动”变量。这个变量直接存储“值”,并置于堆栈中,因此更加高效。”

注意,堆和堆栈不一样滴,堆是一个通用的内存池,用来存储所有的Java对象。
堆栈速度超快,仅此于寄存器,但是有些约束限制了程序的灵活性,一般用于存储对象引用。

基本数据类型和相应的包装类
boolean-Boolean
char----Character
byte----Byte
short--- Short
int-----Integer
long----Long
float---Float
double--Double

由此可见,他支持的是第二种观点,me to!

支持第二种观点:
Java的基本数据类型与对象有很大的区别
首先:Java中所有类都是直接或间接继承自Object类的,所以任何一个对象都可以转化成Object,可以任意继承使用Object的所有方法! 也就是说任意类都可以这样声明: Object obj = new XXX();
但是很遗憾,int等基本类型不能这样声明,因为它不是一个Object!
第二:Java中的类的创建都是用new 关键字 而且是创建在堆里面的! 而基本类型不用new关键字 创建在栈中。
第三:从Object类的clone()方法也可以发现基本数据类型和Object类型的区