java中的变量
什么是变量?
就是变化着的数值,不确定的数据。
在java中,我们通过定义变量,在内存中开辟空间,来存储不确定的值。而开辟空间是通过 明确数据类型,变量名,数据来完成的。
定义变量的格式: 数据类型 变量名 =初始化值;
数据类型
java是强类型语言(必须为所有数据指定数据类型),定义了明确的数据类型,在内存中分配了不同大小的内存空间,java中的数据类型有两种:基本数据类型和引用数据类型。
1基本数据类型(8种)
1.1 整数类型 : byte short int long
1.2浮点型:float,double
1.3 字符型: char
1.4布尔型:boolean
在了解数据类型之前,先要清楚计算机内存的分布,在计算机中,最小的单位是位(bit)。
1位 = 1 bit。 而8位又构成一个字节(byte), 即 8 bit = 1 byte; 8位= 1字节;
整数类型:
byte : 使用byte关键字来定义byte类型,byte是整型中内存空间分配最少的,占 1 个字节(也就是8位) ,byte的取值范围在 -2的7次方 到 2的7次方减一, 也就是 -128~~127之间。(1百多)
short : 短整型。short 短整型在 内存中 占 2个字节 (16位),short的取值范围在 -2的15次方 到 2的15次方减一,也就是 -32768 ~~ 32767 之间,(3万)
int : 整型。整型在内存中占 4 个字节 (32位) ,int的取值范围很大,足够一般情况使用,所以int整型的应用范围是最广的,它的取值范围是在-2的31次方 到 2的31次方减一,也就是 -2147483648~~ 2147483647 之间 (20亿)
long : 长整型,长整型在 内存中 占 8个字节 (64位),long的取值范围在 -2的63次方 到 2的63次方减一,也就是 -9223372036854775808 ~~9223372036854775807 之间 (long的范围已经是相当相当大了 过千万亿).
在java中,默认的整数类型是 int型,所以在给long类型变量赋值的时候,如果这个变量的值超过int类型的范围,需要在它的结尾加上'L'或者'l'.
浮点类型:
float:单精度浮点型。在内存中站 4个字节(32位),取值范围在 1.4E-45 ~~ 3.4028235E-38 。java中默认的小数类型是double类型,所以如果需要使用float型小数,则需要在小数后面添加‘F’或者‘f’,声明浮点类型时,,我们可以使用后缀‘D’或‘d’,来明确表明这是一个double类型数据,不加‘d’不会出错,但是声明float类型变量时,如果不加‘f’会出错,因为默认的小数类型是double类型,所以不加‘f’,会被认为是double类型而报错。
<span style="font-size:18px;">public static void main(String[] args){
int a;
double a=3.2;//正确
float f=13.1;//会报错,需要在后面加f声明这是一个float类型变量
float f1=3.14f;//正确
}</span>
double: 双精度浮点类型,在内存中占64位, 取值范围是 4.9E-324 ~~ 1.7976931348623157E308 ,单双精度的区别是 他们具有不同的取值范围,而不是小数点后一位和两位。
字符类型:
char : 字符类型 用于存储单个字符,占用2个字节(16位),在赋值的时候需要用单引号‘’ 引起来,在单引号中只能有一个字符。char类型是无符号整数类型,取值范围是在0-65535。 这些整数与 ASCII编码表 一一对应。
在编码表中, 整数48 --‘0’ (数字0)
65-90 ‘A’ ---'Z'
97-122 'a'---'z'
布尔类型:
布尔类型又被叫做逻辑类型,只有两个值,true 和 false , 分别代表布尔逻辑中的真和假 , 使用boolean关键字声明布尔类型变量,通常被用在流程控制中作为判断条件。
类型按照精度大小排序:
byte < short < int < long < float < double
数据类型转换:
数据类型转换是将一个值的类型更改为另一种类型的过程。涉及转换的数据类型转换不包括逻辑类型。
数据类型转换有两种方式: 1 隐式转换(自动类型提升) 2显示转换(又称为强制类型转换)
1) 自动类型提升 :
如果从低精度的数据类型向高精度的数据类型提升,内存不会溢出,并且总是成功的,在java中系统会自动执行这个操作。
2) 强制类型转换 : 当自动类型提升不能实现目的,或者在函数调用时,为了实现参数类型一致。在强制类型转换的过程中,高精度的数据转换为低精度的数据,这个过程中必然会有精度丢失。
分析1 System.out.println(‘a’) 与 System.out.println('a'+1)的区别
分析2 System.out.println(1+2"a") 与 System.out.println(1+2+"a"+1+2)的区别
分析3 byte b=3;
b=b+4;//报错。
这句话错误的,因为 结果是int类型不能自动转换成byte类型。
应该如下。
b=(byte)(b+4);