《Java编程的逻辑笔记2》--赋值
一丶基本类型
(1)整数类型
整数类型有byte, short, int和long,分别占用1/2/4/8个字节,取值范围分别是:
整型范围.png
(2)小数类型
小数类型有float和double,占用的内存空间分别是4和8个字节,有不同的取值范围和精度,double表示的范围更大,精度更高,具体来说:
小数型范围.png
(3)boolean类型
这个很简单,直接使用true或false赋值,分别表示真和假,例如:
boolean b = true;
b = false;
(4)字符类型
字符类型char用于表示一个字符,这个字符可以是中文字符,也可以是英文字符。在内存中,Java用两个字节表示一个字符。赋值时把常量字符用单引号括起来,不要使用双引号,例如:
char c = 'A';
char z = '中';
数组类型
赋值语法
基本类型的数组有三种赋值形式,如下所示:
int[] arr = {1,2,3};
int[] arr = new int[]{1,2,3};
int[] arr = new int[3];
arr[0]=1; arr[1]=2; arr[2]=3;
第一种和第二种都是预先知道数组的内容,而第三种是先分配长度,然后再给每个元素赋值。
第三种形式中,即使没有给每个元素赋值,每个元素也都有一个默认值,这个默认值跟数组类型有关。数值类型的值为0,boolean为false, char为空字符。
数组有一个length属性,但只能读,不能改。
三丶数组和基本类型的区别
一个基本类型变量,内存中只会有一块对应的内存空间。但数组有两块,一块用于存储数组内容本身,另一块用于存储内容的位置。
例:
内存视图.png
为什么数组要用两块空间
不能只用一块空间吗?我们来看下面这个代码:
int[] arrA = {1,2,3};
int[] arrB = {4,5,6,7};
arrA = arrB;
这个代码中,arrA初始的长度是3,arrB的长度是4,后来将arrB的值赋给了arrA。如果arrA对应的内存空间是直接存储的数组内容,那么它将没有足够的空间去容纳arrB的所有元素。
用两块空间存储,这个就简单的多,arrA存储的值就变成了和arrB的一样,存储的都是数组内容{4,5,6,7}的地址,此后访问arrA就和arrB是一样的了,而arrA {1,2,3}的内存空间由于无人引用会被垃圾回收,如下图所示:
由上,也可以看出,给数组变量赋值和给数组中元素赋值是两回事。给数组中元素赋值是改变数组内容,而给数组变量赋值则会让变量指向一个不同的位置。
上面我们说数组的长度是不可以变的,不可变指的是数组的内容空间,一经分配,长度就不能再变了,但是可以改变数组变量的值,让它指向一个长度不同的空间,就像上例中arrA后来指向了arrB一样。