赋值html
上节咱们说了数据类型和变量,经过声明变量,每一个变量赋予一个数据类型和一个有意义的名字,咱们就告诉了计算机咱们要操做的数据。swift
有了数据,咱们能作不少操做。但本文只说说对数据作的第一个操做:赋值。声明变量以后,就在内存分配了一块位置,但这个位置的内容是未知的,赋值就是把这块位置的内容设为一个肯定的值。数组
Java中基本类型、数组、对象的赋值有明显不一样,本文介绍基本类型和数组的赋值,关于对象后续文章会详述。spa
咱们先来讲基本类型的赋值,而后再说数组的赋值。code
基本类型的赋值htm
整数类型对象
整数类型有byte, short, int和long,分别占用1/2/4/8个字节,取值范围分别是:blog
类型名 | 取值范围 |
byte | -2^7 ~ 2^7-1 |
short | -2^15 ~ 2^15-1 |
int | -2^31 ~ 2^31-1 |
long | -2^63 ~ 2^63-1 |
咱们用^表示指数,2^7即2的7次方。这个范围咱们不须要记的那么清楚,有个大概范围认识就能够了,大多很多天常应用,通常用int就能够了。后续文章会从二进制的角度进一步分析表示范围为何会是这样的。内存
赋值形式很简单,直接把熟悉的数字常量形式赋值给变量便可,对应的内存空间的值就从未知变成了肯定的常量。但常量不能超过对应类型的表示范围。例如:get
byte b = 23; short s = 3333; int i = 9999; long l = 32323;
可是,在给long类型赋值时,若是常量超过了int的表示范围,须要在常量后面加大写或小写的L,即L或l,例如:
long a = 3232343433L;
这个是因为数字常量默认为是int类型。
小数类型
小数类型有float和double,占用的内存空间分别是4和8个字节,有不一样的取值范围和精度,double表示的范围更大,精度更高,具体来讲:
类型名 | 取值范围 |
float | 1.4E-45 ~ 3.4E+38 -3.4E+38 ~-1.4E-45 |
double | 4.9E-324 ~1.7E+308 -1.7E+308 ~ -4.9E-324 |
取值范围看上去很奇怪,通常咱们也不须要记住,有个大概印象就能够了。E表示以10为底的指数,E后面的+号和-号表明正指数和负指数,例如:1.4E-45表示1.4乘以10的-45次方。后续文章会进一步分析小数的二进制表示。
对于double,直接把熟悉的小数表示赋值给变量便可,例如:
double d = 333.33;
但对于float,须要在数字后面加大写F或小写f,例如:
float f = 333.33f;
这个是因为小数常量默认为是double类型。
除了小数,也能够把整数直接赋值给float或double,例如:
float f = 33; double d = 3333333333333L;
字符类型
字符类型char用于表示一个字符,这个字符能够是中文字符,也能够是英文字符。在内存中,Java用两个字节表示一个字符。赋值时把常量字符用单引号括起来,不要使用双引号,例如:
char c = 'A'; char z = '中';
关于字符类型有一些细节,后续文章会进一步深度解析。
一些说明
上面介绍的赋值都是直接给变量设置一个常量值。但也能够把变量赋给变量,例如:
int a = 100; int b = a;
变量能够进行各类运算(后续文章讲解),也能够将变量的运算结果赋给变量,例如:
int a = 1; int b = 2; int c = 2*a+b; //2乘以a的值再加上b的值赋给c
上面介绍的赋值都是在声明变量的时候就进行了赋值,但这不是必须的,能够先声明变量,随后再进行赋值。
数组类型
赋值语法
基本类型的数组有三种赋值形式,以下所示:
1. int[] arr = {1,2,3}; 2. int[] arr = new int[]{1,2,3}; 3. int[] arr = new int[3]; arr[0]=1; arr[1]=2; arr[2]=3;
第一种和第二种都是预先知道数组的内容,而第三种是先分配长度,而后再给每一个元素赋值。
第三种形式中,即便没有给每一个元素赋值,每一个元素也都有一个默认值,这个默认值跟数组类型有关。数值类型的值为0,boolean为false, char为空字符。
数组长度能够动态肯定,以下所示:
int length = ... ;//根据一些条件动态计算 int arr = new int[length];
虽然能够动态肯定,但定了以后就不能够变,数组有一个length属性,但只能读,不能改。
一个小细节,不能在给定初始值的同时还给定长度,即以下格式是不容许的:
int[] arr = new int[3]{1,2,3}
这是能够理解的,由于初始值已经决定了长度,再给个长度,若是还不一致,计算机将无所适从。
数组和基本类型的区别
一个基本类型变量,内存中只会有一块对应的内存空间。但数组有两块,一块用于存储数组内容自己,另外一块用于存储内容的位置。
用一个例子来讲明,有一个int变量a,和一个int数组变量arr,其代码,变量对应的内存地址和内存内容以下所示:
代码 | 内存地址 | 内存数据 |
int a = 100; | 1000 | 100 |
int[] arr = {1,2,3}; | 2000 | 3000 |
3000 | 1 | |
3004 | 2 | |
3008 | 3 |
基本类型a的内存地址是1000,这个位置存储的就是它的值100。
数组类型arr的内存地址是2000,这个位置存储的值是一个位置3000,3000开始的位置存储的才是实际的数据1,2,3。
为何数组要用两块空间
不能只用一块空间吗?咱们来看下面这个代码:
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 {1,2,3}
\
\
arrB -> {4,5,6,7}
由上,也能够看出,给数组变量赋值和给数组中元素赋值是两回事。给数组中元素赋值是改变数组内容,而给数组变量赋值则会让变量指向一个不一样的位置。
上面咱们说数组的长度是不能够变的,不可变指的是数组的内容空间,一经分配,长度就不能再变了,可是能够改变数组变量的值,让它指向一个长度不一样的空间,就像上例中arrA后来指向了arrB同样。
小结
给变量赋值就是将变量对应的内存空间设置为一个明确的值,有了值以后,变量能够被加载到CPU,CPU能够对这些值进行各类运算,运算后的结果又能够被赋值给变量,保存到内存中。
数据能够进行哪些运算?如何进行运算呢?