数据类型
基本类型(primitive type)
-
数值类型
-
整数类型:byte(占1字节)、short(占2字节)、int(占4字节)、long(占8字节)
-
浮点类型:float(占4字节)、double(占8字节)
-
字符类型:char(占2字节)
-
布尔类型:boolean(占2字节)
//八大基本数据类型
//整数
int num=10;//最常用
byte num1=20;
short num2=30;
long num3=30L;//long要在数字后面加 L
//小数:浮点数
float num4=50.1F;//float要在数字后面加 F
double num5=3.1415926589;
//字符
char name='l';
//字符串String不是关键字,是类
//String namel="lyf";
//布尔值:是非
boolean flag=true;
boolean flag1=false;
引用类型(reference type)
数据类型拓展
//整数拓展:二进制0b、十进制、八进制0、十六进制0x
int i = 10;
int i2 = 010;
int i3 = 0x10;
System.out.println(i);
System.out.println(i2);
System.out.println(i3);
System.out.println("============================================");
//=====================================================
//浮点数拓展
//float 有限、离散、舍入误差、大约、接近但不等于
//double
//最好避免使用浮点数进行比较
//最好避免使用浮点数进行比较
//最好避免使用浮点数进行比较
//银行业务用Bigdecimal(数学工具类)表示
float f = 0.1f;
double d = 1.0 / 10;
System.out.println(f == d);//false
System.out.println(f);
System.out.println(d);
float d1 = 232323232323f;
float d2 = d1 + 1;
System.out.println(d1 == d2);//true
System.out.println("========================================");
//====================================================
char c1 = 'a';
char c2 = '中';
System.out.println(c1);
System.out.println((int) c1);//强制转换类型
System.out.println(c2);
System.out.println((int) c2);//强制转换类型
//所有的字符本质是数字
//编码Unicode,2字节,0-65536
//U000,UFFF
char c3 = '\u0061';
System.out.println(c3);//a
System.out.println("===============================================");
//=====================================================================================
//转义字符
//\t 制表符
//\n 换行
System.out.println("Hello\tWorld");
System.out.println("Hello\nWorld");
System.out.println("===============================================");
//====================================================================
//布尔值拓展
boolean flag = true;
if (flag = true) {}//与下面一样
if (flag) {}//与上面一样
//代码要精简
类型转换
-
运算中,不同类型数据先转换为同一类型。
优先级:低---------------------------------------------------------->高
byte,short,char -> int -> long -> float -> double
-
整数优先级小于浮点数
int i = 128;
byte b = (byte)i;//内存溢出
double d = i;
//强制类型转换:(类型)变量名 高-->低
//自动类型转换:低-->高
System.out.println(i);
System.out.println(b);
System.out.println(d);
System.out.println("=============================================");
/*
1、不能对布尔值进行转换
2、不能把对象类型转换为不相干的类型
3、在把高容量转换到低容量的时候,强制转换
4、在转换的时候可能存在内存溢出或精度问题
*/
System.out.println((int)23.7);//23,精度问题
System.out.println((int)-45.98f);//-45,精度问题
System.out.println("================================================");
char c = 'a';
int f = c+1;
System.out.println(f);
System.out.println((char)f);
//操作较大数时注意溢出问题
//JDK新特性,数字之间可以用下划线分割
int money = 1_000_000_000;
int years = 20;
int total = money * years;//计算时溢出了
System.out.println(total);
long total2 = money * years;//默认时int,转换前就存在问题
System.out.println(total2);
long total3 = money * ((long)years);//先把一个数值转换为long
System.out.println(total3);