前言
每个变量占据了一定的内存位置,声明一个变量时,就是在告知编译器这个变量可以存放什么类型(占据多少个字节的内存)。
什么是基本类型变量
一、定义
JAVA语言本身定义的整型、字符型、浮点型和布尔类型是基本类型变量,通俗来说可利用关键字声明的变量就是基本类型变量。对于基本类型变量来说,对应内存所存储的值就是基本类型值。
二、八种基本类型变量
1.整型
- byte—占据1个字节 范围:-2^7~2^7-1;
- short –占据2个字节 范围:-2^15~2^15-1;
- int——占据4个字节 范围:-2^31~2^31-1;计算机默认整型为int类型。
- long—-占据8个字节 范围:-2^63~2^63-1;
2.字符型
- char 占据2个字节 范围:0~(2^15) - 1;定义该变量时需要用单引号‘’引用,或者用数字,在计算机中是16位无符号整数形式存储,unicode全球统一编码范围为0-65535,65–A,97–a,48–0,特殊符号需要用\转义。
3.浮点型
- float 占据4字节 范围:3.4e-45~1.4e38;
- double 占据8个字节 范围:4.9e-324~1.8e308;计算机默认浮点型为double类型。
在计算机中,浮点数通常被表示成如下格式:
浮点值 = Ms值 × M值×R^E值
|__Ms(符号位)__|____E(阶位)____|________M(尾数位)________|
Ms是尾数的符号位(sign bit),即浮点数的符号位,安排在最高一位,其中 0 表示数值为正数,而 1 则表示负数;R是阶码的基数,计算机一般规定为2、8或16,是一个不确定的常数;E 是阶码,紧跟在符号位之后,单精度数为 8 位,双精度数为 11 位,都含阶码的一位符号位;M 是尾数,在低位部分,占用n位。
注意:由于计算机存储方式的原因,所以存在精度丢失的情况,数字电路有更加详细的解释。
4.布尔类型
- boolean 占据1字节 只有两种值:true/false;所有逻辑条件都是布尔值。
引用类型变量
一、定义
引用类型变量(内存)存储的是一个引用(基址),它指向对象在内存中的位置(对象的存储地址)。对象类型都是引用类型变量。
二、解析
注意:字符串不是基本类型变量,字符串“MadJieJie”就相当于构造器new String()那样的实例,大家可以像指针那样理解成为引用类型变量实际上存储的只是地址。
基本类型变量和引用类型变量区别
赋值
将一个变量赋值给另一个变量,则两者拥有相同的值。
byte a = 1;
byte b = 2;
a=b;
对于基本类型变量而言,就是将一个变量的实际值赋给另一个变量,实际上就是将变量内存里所有的位上的二进制替换掉。
String object1 = “MadJieJie”;
String object2 = “MadJieJie”;
object1 = object2; //两者引用值相等之后
当两者引用值相等之后,object1的引用就指向了object2对象,那么原来object1的内存是不会造成内存泄漏的,因为object1对象失去了所有的引用,它会被系统当作垃圾回收,这是JAVA的内存回收机制,但请注意,若object1还有其他引用变量指向它就不被回收。
对于引用类型变量而言,就是将一个变量的引用赋给另一个变量,实际上就是替换了对象的基址。
注意:
新手想要判断它们存储的字符串是否一样时,往往使用object1 == object2;返回的布尔值是true还是false呢?
答案显然是false,因为不同对象开辟的地址不一样,Java内存分配机制不可能分配已经使用的地址给予新的对象。
我们可以使用equals()方法来比较它们存储的字符串数据是否相同。