java基本数据类型和引用数据类型

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

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

              ┃                         ┣字符型:char

数据类型╋                         ┗布尔型:boolean

              ┃                        ┏类(class)

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

                                        ┗数组(array)

基本数据类型

数据类型 大小(bit) 范围 默认值 包装类
byte(字节) 8 -128 - 127 0 Byte
shot(短整型) 16 -32768 - 32767 0 Boolean
int(整型) 32 -2147483648-2147483647 0 Short
long(长整型) 64 -9233372036854477808-9233372036854477807 0 Character
float(浮点型) 32 -3.40292347E+38-3.40292347E+38 0.0f Integer
double(双精度) 64 -1.79769313486231570E+308-1.79769313486231570E+308 0.0d Long
char(字符型) 16 ‘ \u0000 - u\ffff ’ ‘\u0000 ’ Float
boolean(布尔型) 1 true/false false Double

引用数据类型

引用类型(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()方法。


两种类型对比

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

基本数据类型 引用数据类型
在栈中进行分配 在堆中进行分配,堆的读写速度远不及栈
变量名指向具体的数值 变量名指向存数据对象的内存地址,即变量名指向hash值
变量在声明之后java就会立刻分配给他内存空间 它以特殊的方式(类似C指针)指向对象实体(具体的值),这类变量声明时不会分配内存,只是存储了一个内存地址
基本类型之间的赋值是创建新的拷贝 对象之间的赋值只是传递引用
“==”和“!=”是在比较值 “==”和“!=”是在比较两个引用是否相同,需要自己实现equals()方法
基本类型变量创建和销毁很快 类对象需要JVM去销毁


你可能感兴趣的:(JAVA基础)