一、数据类型
数据类型分为
1.基础数据类型
2.引用数据类型(除了八个基础数据类型其他都是引用类型)
基础数据类型(八个)
1)按整数分 (4个)
(1)byte 字节
(2)short 短整型
(3)int 整型
(4)long 长整型
2)按小数分(2个)
(1)float 单精度浮点型 赋值时要在结尾处加f
(2)double 双精度浮点型
3)按字符型(1个)
char
4)按布尔(1个)
boolean 值为false或者ture
public class Demo01 {
public static void main(String[] args) {
//整数
byte a=10;
int num1=20;
short num2=30;
long num3=40L;//long 型要加数字结尾要加L
//小数,浮点数
float num4=50.1f;//float单精度浮点数要在数字后面加f
double num5=23.456445656;
//字符 单个字符
char name='无';
//字符串,String不是关键字,它是类
//String Name="吴瑾黎";
//布尔值
boolean flag=true;
boolean view=false;
}
}
数据类型拓展
public class Demo02 {
public static void main(String[] args) {
//整数拓展 进制 二进制0b 十进制 八进制0 十六进制0
int i=10;
int i2=010;//八进制0
int i3=0x10;//十六进制0x 0~9 A~F 16
System.out.println(i);
System.out.println(i2);
System.out.println(i3);
System.out.println("=======================");
//=====================================================================================
//浮点数拓展? 银行业务怎么表示?钱
//BigDecimal 数学工具类 比较的话最好用这个类,减少误差
//=====================================================================================
//float 有限 离散 舍入误差 结果就是一个大约数 接近但不等于
//double
//最好完全不使用浮点数进行比较
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=223232323232323232323f;
float d2=d1+1;
System.out.println(d1==d2);//true
//=====================================================================================
//字符拓展?
//=====================================================================================
char c1='a';
char c2='中';
System.out.println(c1);
System.out.println((int)c1);//强制类型转换(type)这里是强制转换为int型
System.out.println(c2);
System.out.println((int)c2);//强制转换
//所有的字符本质还是数字
//编码 Unicode 占2个字节 可以表示0-65536个字符
char c3='\u0061';
System.out.println(c3);//根据Unicode表中c3是a
//转义字符
// \t 制表符
// \n 换行
System.out.println("Hello\tWorld");
//
String sa=new String("hello world");
String sb=new String("hello world");
System.out.println(sa==sb);//false 因为new是创建了一个新的字符池
String sc="hello world";
String sd="hello world";
System.out.println(sc==sd);//true 他们的地址在一个字符池
//布尔值扩展
boolean flag=true;
if(flag==true){}//新手的写法
if(flag){}//两种形式是相等的 老手的写法
//Less is More 代码要精简易读
}
}
运行结果:
10
8
16
=======================
false
0.1
0.1
true
a
97
中
20013
a
Hello World
false
true
二、类型转换
1.强制转换
public class Demo03 {
public static void main(String[] args) {
int i=128;
byte b=(byte) i;/*这个就是强制转换(内存溢出)由于byte最大是127,
128超出范围导致溢出,*/
System.out.println(i);
System.out.println(b);
//强制转换(类型)变量名
//自动转换 低--高
int ii=128;
float bb= ii;
System.out.println(ii);
System.out.println(bb);
/*
注意:
1.不能对布尔值进制转换
2.不能把对象类型转换为不相干的类型
3.在把高容量转换到低容量的时候,强制转换
4.转换的时候可能存在内存溢出,或者精度问题!
*/
System.out.println("==================");
System.out.println((int)23.7);//结果23,存在精度误差
System.out.println((int)-45.89f);//结果-45,存在精度误差
System.out.println("==================");
char c='a';
int d=c+1;
System.out.println(d);
System.out.println((char)d);
}
}
运行结果
128
-128
128
128.0
==================
23
-45
==================
98
b
2.自动转换
自动转换——底类型到高类型转换
//char ,int,short 《 long 《 float《 double
public class Demo1{
public void static main(String[] args){
//自动转换 低--高,float 比int类型高
//char ,int,short 小于long 小于float double
int ii=128;
float bb= ii;
System.out.println(ii);//128
System.out.println(bb);//128.0
}
}
数据类型可能存在的问题
1.溢出问题
2.精度问题
public class Demo04 {
public static void main(String[] args) {
//操作比较大的数时,考虑溢出问题
//JDK新特性,数字之间可以用下划线进行分割
int money=10_0000_0000;
System.out.println(money);
int years=20;//最多能达到20年
int total=money*years;//-1474836480,计算的时候溢出了
long total2=money*years;//计算的时候是以int算的当时已经出现问题了,所以后面不能在继续转换了
System.out.println(total);
System.out.println(total2);
long total123=money*((long)years);
//运用了强制转换,years被强制为long,然后是自动转换money是int会自动转换为long
System.out.println(total123);//值正常出来了20000000000
//自动转换
//L l 因为 小写字母l像1 所以最好写成大写的L
}
}