数据类型
基本类型
-
整数类型:
-
byte占1个字节,范围:-128-127
-
short占2个字节,范围:-32768-32767
-
int占4个字节范围:-2147483648-2147483647
-
long占8个字节范围:-9223372036854775808-9223372036854775807 后需+L表示
byte num1 = 10; //-128-127,占1个字节 short num2 = 20; //-32768-32767,占2个字节 int num3 = 30; //占4个字节 long num4 = 40L; //后面加L区分,占8个字节 System.out.println(num1); System.out.println(num2); System.out.println(num3); System.out.println(num4); /* 输入结果 10 20 30 40 */
-
-
浮点数类型:
-
float占4个字节,后需+F表示
-
double占8个字节
float num5 = 50.2F; //加F区分、占4个字节 double num6 = 3.141592653; //占8个字节 System.out.println(num5); System.out.println(num6); /* 输入结果 50.2 3.141592653 */
-
-
字符类型:
-
char占2个字节,只能输出一个字符
-
String可输出字符串,但不是关键字,是类
char name = '国'; //占2个字节,只能输入一个字符串 //字符串,String不是关键字,是类 String names = "中国"; System.out.println(name); System.out.println(names); /* 输入结果 国 中国 */
-
-
boolean类型:(布尔值)
-
占一位其值只有true 和false两个
boolean flag = true; // boolean flag = false;
-
引用类型
- 类
- 接口
- 数据
类型深入
整数:
进制: 二进制0b 十进制 八进制0 十六进制0x
int i = 10;
int i2 = 010;
int i3 = 0x10;
System.out.println(i); //10
System.out.println(i2); //8
System.out.println(i3); //16
浮点数:
//浮点数拓展? 银行业务怎么表示??
// float 表现字长是有限、离散的,舍入误差,大约数 最好完全不要用浮点数进行比较
// double
// BigDecimal 数学工具类,使用这个进行数字比较
float f = 0.1f; //0.1
double g = 1.0/10; //0.1
System.out.println(f==g); //false
float d1 = 2323231312123f;
float d2 = d1 + 1;
System.out.println(d1==d2); //true
字符型:
char c1 = 'a';
char c2 = '中';
System.out.println(c2);
System.out.println((int)c1); //将字符型转换位整型
char c3 = '\u0061';
System.out.println(c3);
/*
中
97
a
所有的字符本之还是数字 */
转义字符:
转义字符 | 译义 |
---|---|
? | 书写连续多个问好时使用,防止他们被解析成三字母词 |
\ \ | 用于表示一个反斜杠,防止他被解译成一个转义字符 |
\a | 警告字符,表示:蜂鸣 |
\b | 退格符 |
\f | 换页符 |
\n | 换行符 |
\r | 回车符 |
\t | 水平制表符 |
\v | 垂直制表符 |
public class Dome4 {
public static void main(String[] args) {
String sa = new String(original:"hello world");
String sb = new String(original:"hello world");
String sc = "hello world";
String sd = "hello world";
System.out.println(sa==sb); //false
System.out.println(sc==sd); //true
}
}
/*如果比较的是基本数据类型,则比较的是数值是否一致
如果比较的是引用数据类型,则比较的是对象的地址值是否一致
*/
类型转换
-
由于Java是强类型语言,所以要进行运算时,不同类型数据需转换为同一类型数据才能运算
低 -------------------------------------------->高 byte,short,char--> int --> long --> float --> double (小数的优先级>整数)
强制转换和自动转换
强制转换:(高——>低)
- 格式:(类型)变量名
- 会出现内存溢出效果
int i = 128;
//Byte //Ctrl + 鼠标左键 进入Byte属性(-128-127)
byte b = (byte)i; //内存溢出
//强制转换 (类型)变量名 高--低
//自动转换 低--高
System.out.println(i); //128
System.out.println(b); //-128
自动转换 (低——>高)
int i = 128;
double b = i;
System.out.println(i); //128
System.out.println(b); //128.0
注意
- 不能对布尔值进行转换
- 不能把对象类型转换成不相干的类型
- 在把高容量转换为低容量时,需使用强制转换
- 转换时可能会出现内存溢出,或者出现精度问题!
System.out.println((int)23.7); //23
System.out.println((int)-45.89f); //-45
char c = 'a';
int d = c+1;
System.out.println(d); //98
System.out.println((char)d); //b
计算转换
byte、short、int、long在和int一起计算时都会转换成int
public class Dome6 {
public static void main(String[] args) {
int money = 10_0000_0000; //数字之间可以用下划线分割
int years = 20;
int total = money*years;
System.out.println(total); //-1474836480 计算溢出,
long total2 = money*years; //-1474836480
/* 计算时默认转换为int类型计算,转换之前就已经存在问题 */
long total3 = money*((long)years); //先将一个数转换为long
System.out.println(total3); //20000000000
}
}