【Java笔记】03 变量
一、变量基本
- 概念
变量是程序的基本组成单位,相当于内存中一个数据存储空间的表示,基本要素(类型、名称、值)
- 步骤
- 声明变量 int a;
- 赋值 a=60;
- 使用 System.out.println(a);
- 注意事项
1.变量表示内存中的一个存储区域
2.该区域有名称和内存
3.先声明后使用
4.该区域的数据在同一类型范围内变化
5.变量在同一作用域不能重名
二、+的使用
1.左右都是数值型=>加法运算
2.左右两边有一方为字符串=>拼接运算
System.out.println(100+98);//198
System.out.println("100"+98);//10098
System.out.println(100+3+"hello");//103hello
System.out.println("hello"+100+3);//hello1003
三、数据类型
1.基本数据类型
- 数值型
整数类型,存放整数 byte(字节)[1],short[2],int[4],long[8]
浮点类型 float[4],double[8] - 字符型
存放单个字符 char[2] - 布尔型
存放true,false boolean[1]
2.引用数据类型 - 类
- 接口
- 数组
四、整数类型
类型 | 占用存储空间 | 范围 |
---|---|---|
byte,字节 | 1字节 | -128~127 |
short,短整型 | 2字节 | -215 ~ 215-1,-32768~32767 |
int,整型 | 4字节 | -231 ~ 231-1,-2147483648~2147483647 |
long,长整型 | 8字节 | -263 ~ 263-1 |
1.Java各整数类型有固定的范围和字段长度,不受具体OS影响,保证可移植性
2.Java的整型常量默认为int,声明long需要后加’l’或’L’
3.Java程序中变量常声明为int型,除非不足以表示大数,才用long
4.bit:计算机中的最小存储单位
byte:计算机中基本存储单元,1 byte = 8 bit
五、浮点类型
类型 | 占用存储空间 | 范围 |
---|---|---|
单精度float | 4字节 | -3.403E38~3.403E38 |
双精度double | 8字节 | -1.798E308~1.798E308 |
浮点数=符号位+指数位+尾数位
尾数部分可能丢失,造成精度损失
默认double,声明float型常量,后加f或F
0.12也可写成.12
通常使用double,精度更高
- 坑
double num1 = 2.7;
double num2 = 8.1/3;
System.out.println(num1); //2.7
System.out.println(num2); //接近2.7的一个小数,而不是2.7
对运算结果是小数的进行相等判断时,Pay Attention!
正确写法:
if(Math.abs(num1 - num2) < 0.000001) {
//差值非常小,达到要求精度
System.out.println("相等");
}
但直接赋值时,两数可判断相等。
六、字符类型
字符类型可以直接存放一个数字
char c=97;
1.字符常量单引号
2.允许用转义字符 char c = ‘\t’;
3.Java中,char的本质是一个整数,在输出时,对应unicode码对应的字符
4.char类型是可以进行运算的,相当于一个整数
System.out.println('a' + 10);//107
char c5 = 'b' + 1;//98+1==> 99
System.out.println((int)c5); //99
System.out.println(c5); //99->ASCII码=>c
- 字符类型本质
- 字符存储到计算机中,将对应的码值找出来
存储:’a’=>码值 97=>二进制 110 0001=>存储
读取:二进制 110 0001=>97=>’a’=>显示 - 编码表
- ASCII 一个字节表示,128个字符。实际上一个字节可以表示256个字符,只用了128个
- Unicode 固定大小的编码,使用两个字节来表示字符,字母和汉字都是占用两个字节,浪费空间
- utf-8 大小可变的编码,字母使用1个字节,汉字使用3个字节
- gbk 可表示汉字,范围更广泛,字母使用1个字节,汉字使用2个字节
- gb2312 可以表示汉字,少用
- big5 繁体汉字
七、布尔类型
占1个字节,适用于逻辑运算
只允许取值true和false
不能用0或非0代替false和true
八、数据类型转换
- 自动类型转换
1.精度小的类型自动转换为精度大的数据类型
char -> int -> long -> float -> double
byte -> short ->int -> long -> float ->double
2.有多种类型的数据混合运算时,系统首先将所有数据转换成容量最大的那种数据类型,再进行计算
public class Convert{
public static void main (String[] args){
int n1 = 10;
//float d1 = n1 + 1.1;//错误 n1+1.1结果是double类型
double d1 = n1 + 1.1;//✔
float d = n1 + 1.1F;//✔
}
}
3.byte和short不能跟char进行自动类型转换
当把数赋给byte时,先判断该数是否在byte范围内
byte b1 = 10;//✔ -128~127
byte b = 1000;//✘ 超出范围
int n2 = 1;
byte b2 = n2;//✘ 变量赋值,会判断类型
char c1 = b1;//✘
4.byte,short,char可以进行运算,都转成int
byte b2 = 1;
byte b3 = 2;
short s1 = 1;
short s2 = b2 + s1;//✘ byte和short运算时转成int,再赋值给小精度的short类型报错
byte b4 = b2 + b3;//✘ byte和byte运算时转成int
5.boolean类型不参与自动类型转换
- 强制类型转换
自动类型转换的逆过程,容量大的数据类型转换为容量小的,可能造成精度降低或溢出
e.g.:int i = (int)1.9;
强转符号只对最近的操作数有效
int x = (int)10*3.5+6*1.5;//编译错误:只强转了10,结果是double->int
int y = (int)(10*3.5+6*1.5);//(int)44.0->44
char类型可以保存int的常量值,但不能保存int的变量值,需要强转
char c1 = 100;//right
int m = 100;
char c2 = m;//错误
char c3 = (char)m;//right 100对应的字符 d
- 基本数据类型和String类型的转换
- 基本类型转String 加 “ “
int n1 = 100;
float f1 = 1.1F;
double d1 = 4.5;
boolean b1 = true;
String s1 = n1 + "";
String s2 = f1 + "";
String s3 = d1 + "";
String s4 = b1 + "";
- String类型转基本数据类型
基本类型的包装类调用parseXX方法即可
String s5 = "123";
int num = Integer.parseInt(s5);
double num1 = Double.parseDouble(s5);
float num2 = Float.parseFloat(s5);
long num3 = Long.parseLong(s5);
byte num4 = Byte.parseByte(s5);
boolean b = Boolean.parseBoolean("true");
short num5 = Short.parseShort(s5);
//字符串->字符,取字符串第一个字符
System.out.println(s5.charAt(0));//1