Java变量和数据类型
文章目录
一、变量
-
变量是程序中最基本的存储单元
-
变量实质是内存中的一小块区域,使用变量名来访问这块区域,所以使用前要先声明、后赋值,
-
声明格式:[修饰符] type varName [=value];
例如:int i = 100; String s = “hello”;
二、Java数据类型
- 为什么分数据类型?
- 每种数据类型在内存分配不同的内存空间 ,数据类型声明存储数据的内存大小。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Heh5SJst-1641816497882)(C:\Users\16431\AppData\Roaming\Typora\typora-user-images\image-20220109200311982.png)]
1.整数类型 byte、short、int、long
-
Java中整数类型有固定的表数范围和字段长度,器不受具体操作系统的影响,以保证Java程序的可移植性。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qmjOKPo2-1641816497884)(C:\Users\16431\AppData\Roaming\Typora\typora-user-images\image-20220109200911183.png)]
-
Java默认int型;
-
声明long型常量后加 ‘l’ 或者 ‘L’ ,一般用大写L不易混淆 ;
long d = 98758884884L
整型输出 and 整数其他进制表示方式:
package day1; public class Demo2 { public static void main(String[] args) { /* 数据类型:告诉程序中的数据如何存储,如何运算 基本数据类型: 数值型 整数: byte short int long 浮点数:float double 字符型:char 布尔型:boolean 引用类型: 类 例如 String 接口 数组 [] */ //byte 1字节 byte a = 127; System.out.println(a); //short 2字节 short b = 32767; System.out.println(b); System.out.println(Short.MAX_VALUE); System.out.println(Short.MIN_VALUE); //int 4字节 int c = 32768; System.out.println(c); System.out.println(Integer.MAX_VALUE); System.out.println(Integer.MIN_VALUE); //long 8字节 表示long时后面加L long d = 949858942147483647L; System.out.println(d); System.out.println(Long.MAX_VALUE); System.out.println(Long.MIN_VALUE); /*整数其他进制表示方式: * 0b11:二进制整数表示 * 0X11:十六进制整数表示 * 011: 八进制整数表示 * */ byte e = 0b11; //输出3 System.out.println(e); byte f = 0x11; //输出17 System.out.println(f); byte g = 011; //输出8 System.out.println(g); } }
2.浮点型 float、double
float :4字节 声明一个常量时后加 f 或 F
double :8字节
浮点类型有固定的表数长度和字段长度,不受平台影响。
十进制计数方式,例如:3.14 314.0
科学计数法,例如:3.14e2 3.14E2
3.字符型 char
char : 2字节
例如:char c1 = ’a’; //97 char c1 = ’中’;
可以涵盖世界上所有书面语的字符。
char类型可以运算,因为char在字符编码表中有对应数值。
在Java中,char类型字符运行时,直接当做对应编码表中的整数对待。比如:char c =‘a’+1 ; 是先将 ‘ a’ 提升为int ,计算结果98 ,对应的字符是’b’。
3.布尔型 boolean
逻辑运算,用于流程控制。
取值:true 或 false , java中不能0或非0,与C语言不同。
三、ASCII码和Unicode编码
一个二进制位有2种状态,0/1 ,一个字节8 位,可以表示256种不同状态,每一个状态对应一个符号,就可以表示256个符号,从00000000到11111111表示出来。
1.ASCII码
- ASCII (American Standard Code for Information Interchange):
- 美国信息互换标准代码
- 是上个世纪美国制定额一套字符编码,对英语字符等和二进制位的关系做了统一规定。
- ASCII 一共规定了128个字符编码 比如:空格"SPACE"是32(二进制:00100000) 字母A是65(二进制:01000001)
- 这128个符号(包括32个不能打印的控制字符)占用字节后7位,最前面一位统一规定为0 。
- 缺点:不能表示所有字符,只表示英文等字符。
2.Unicode编码
- 将世界所有符号都包含了,包括ASCII码中的符号。
- 编号范围:0x000000 到 0xFFFFFF(十六进制),有110多万。
- 每个字符都有唯一Unicode编码,一般写成16进制,在前面加上U+, 例如:’马‘ 的Unicode是 U+9A6C 。
- JAVA底层采用Unicode编码来存储字符。
UTF-8
- 因为互联网的兴起,计算机和计算机之间通讯需要一种统一的编码方式来编译和解释Unicode编码,所以又有了UTF-8
- UTF-8是Unicode编码的一种具体实现,它规定了字符转换到二进制编码的一系列规则。
- UTF-8最大特点:是一种变长的编码方式,它可以用1~4个字节表示一个符号,根据不同符号而变化字节长度。
四、基本数据类型转换
1.默认数据类型转换
就是从容量小的类型自动转到容量大的
byte short char --> int -->long -->float -->double
1 2 2 4 8 4 8
2.强制数据类型转换
从容量大的转到容量小的
会发生的意外:
- 数据溢出
- 精度降低
/*
byte short char --> int -->long --> float -->double
*/
//1.数据溢出
int x = 258;//4
byte y = (byte)x;//1
System.out.println(y); //结果是2 ,因为128是 1 0000 0010 转为byte时是只有8位,所以就是0000 0010 即2;
//2.精度降低
float z = 10.35f;
long l = (long)z;
System.out.println(l);//结果是10,精度降低