200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > JAVA基本数据类型与引用数据类型

JAVA基本数据类型与引用数据类型

时间:2022-05-09 13:29:58

相关推荐

JAVA基本数据类型与引用数据类型

JAVA基本数据类型与引用数据类型

Java提供了两类数据类型:一种是基本类型(原始类型),一种是引用类型。

- 数据类型图:

┏数值型━┳━整数型:byte short int long

┏基本数据类型━━┫ ┗━浮点型:float double

┃ ┣字符型:char

数据类型╋ ┗布尔型:boolean

┃ ┏类(class)

┗引用数据类型━━╋接口(interface)

┗数组(array)

- 基本数据类型

注意:

1、在基本数据类型中,除了boolean类型所占长度与平台有关外,其他数据类型长度都是与平台无关的。比如,int永远占4个字节(1 Byte = 8 bit)。

2、void不是基本数据类型

在 Java 中基本类型只有八种,详见 Java Language Specification 的 4.2 节:

/docs/books/jls/third_edition/html/typesValues.html#4.2

另外,在 Java Language Specificaion 的第 14.8 节也提及 void 并不是一种类型:

/docs/books/jls/third_edition/html/statements.html#5989

为什么《Thinking in Java》等一些书籍都说,void是基本类型的一种呢?

来看void的包装类java.lang.Void源码:

package java.lang;/*** The Void class is an uninstantiable placeholder class to hold a* reference to the Class object representing the Java keyword* void.** 翻译:Void类是一个不可重复的占位符类,*用于保存对表示Java关键字void的Class对象的引用**/public final class Void {//final表明这个类是不允许被其他类继承/*** The Class object representing the pseudo-type corresponding to* the keyword void.* 翻译:Class对象表示对应于关键字void的伪类型。*/public static final Class<Void> TYPE = Class.getPrimitiveClass("void");/** The Void class cannot be instantiated.* 翻译:Void类不能被实例化。*/private Void() {}}

再看getPrimitiveClass()方法的源码:

/** Return the Virtual Machine's Class object for the named* primitive type.* 翻译:返回指定基本类型的虚拟机的Class对象。*/static native Class getPrimitiveClass(String name);

“Ctrl+Alt+H”查看调用getPrimitiveClass()方法的所有类,确实是“Byte、Boolean、Short、Character、Integer、Long、Float、Double、Void”一共9个包装类,由此猜测把void也归到基本数据类型的说法可能来源于此。

3、基本数据类型的默认值仅在作为类中属性时生效

在方法内部必须先对基本数据类型变量赋值后才能使用,否则编译不通过。Demo如下:

public class DefaultValueTest {static int intA;static boolean blnA;public static void main(String[] args) {int intB;boolean blnB;System.out.println(intA); //输出0System.out.println(blnA); //输出false//System.out.println(intB); //编译不通过//System.out.println(blnB); //编译不通过}}

在程序中如果某些数据可能会返回空值,那么用包装类比较好。比如当结果为空时,转换为int会发生异常,而转换为Integer则不会,因为对象可以为null。此时建议用包装类,虽然会牺牲一些转换效率,但可以避免持久化数据时产生的一些异常。

- 引用数据类型

引用类型(reference type)指向一个对象,不是原始值,指向对象的变量是引用变量。

在java里面除去基本数据类型的其它类型都是引用数据类型,自己定义的class类都是引用类型,可以像基本类型一样使用。

引用类型常见的有:String,StringBuffer,ArrayList,HashSet,HashMap等。

String也属于引用数据类型:

String a = "china";String b =a; // 则a、b都指向常量池的"china"。String a = new String("china");String b =a; //则a、b都指向堆中的"china"。String a = new String("china");String b =a;a = a.substring(0,1); //则b指向栈中的"china",a指向新的对象"c"。

如果要对比两个对象是否相同,则需要使用equals()方法,但有一点需要注意:equals()方法的默认行为是比较引用。如果是你自己写的类,你应该为它重写equals()来比较对象的内容。大多数Java类库都实现了比较对象内容的equals()方法。

- 两种类型对比

最后,基本数据类型和引用数据类型的一些对比如下:

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。