一.基本数据类型:
1.数值型:
整数类型:byte,short,int,long
浮点类型:float,double
2.字符型: char
3.布尔型(逻辑型): boolean
二.浮点类型:就是小数,float,double
34642323.44=3.464232344 *10 ^7
尾数 基数 指数
10001000(2)=1.0001000 *2 ^111 //111(2)=7(10)
尾数 基数 指数
0 00000111 10001000 00000000 0000000
符号位 指数 尾数
double 64位:1位符号位,11位指数,52为尾数
默认的浮点数字面量:double类型
浮点类型后缀:d/D,f/F
一般只使用double计算浮点数,float基本不用
浮点数不能精确运算
double类型可以精确表达int
三.变量名,推荐使用有意义的长变量名,提高代码可读性;
如:age,index等等;
短变量名,如a,b,c等等(无意义);
四.数据类型转换
1.自动类型转换(隐式类型转换)
从小类型到大类型,自动完成
byte<short<int<long<float<double
不包括char和boolean类型;
int n='A';
float m=n;
2.强制类型转换,从大类型到小类型需要强制转换强制类型转换有风险,会造成精度损失或者溢出,应该尽量避免使用强制类型转换。
Unicode编码,个别码是不可见的(如:换行,回车等)
package day02;
public class IntegerDemo {
public static void main(String[] args) {
// TODO 自动生成的方法存根
byte b = 127; // 十进制,符合byte类型范围
b = 0127; // 八进制(0开头),转换为十进制后符合byte类型范围
// b=0x127; //十六进制(0x开头),错误,转换为十进制后超出byte类型范围
//short age=20; //Java中默认是32位,仍然要自动转化为int类型,没有任何性能上的提升
int age=20;
int size=1024*1024*1024*2; //表示2G U盘空间大小
System.out.println(size); //-217483648
//直接量(字面量/常量)
long l=1;//直接量,默认仍然是int类型
//l=2200000000; //错误,超过int最大范围
l=2200000000L; //表示long类型,赋值后面必须加L
//1存储为32位, 1L存储为64位
int a=127;
//byte bx=a; //错误,不能使用int类型给byte/short类型的"变量"直接赋值,因为其范围大
byte bx=(byte)a; //对a进行类型转换,从而完成对bx的赋值
bx=127; //正确,"常量"不超过范围,可以直接赋值
}
}
package day02;
public class FloatDemo {
public static void main(String[] args) {
// TODO 自动生成的方法存根
int a = 0x7fffffff; //2147483647 int类型最大值
int b = 0x7ffffff0; //2147483632
float af = a;
float bf = b;
System.out.println(af); //2.14748365E9
System.out.println(bf);//af和bf输出相同,所以float类型精度比int小(double类型可以精确表达int)
double ca=a;
double cb=b;
System.out.println(ca);//2.147483647E9
System.out.println(cb);//2.147483632E9
double d=2.5; //默认为double类型
float f=2.5F; // F/f表示为float类型
//f=3.0;//错误,因为默认double类型,范围大
f=3.0F;//正确
/*
3:int类型
3L:long类型
3D:double类型
3F:float类型
*/
}
}
package day02;
import java.util.Random;
public class CharDemo {
public static void main(String[] args) {
// TODO 自动生成的方法存根
int i='A';
System.out.println(i);//65,'A'的Unicode码(兼容ASCII码,Java中为Unicode码)
//Unicode编码采用无符号编码,可以存储65536个字符,取值范围是0~65535(0x0000-0xffff)
int a=0x0000;
int b=0xffff;
System.out.println(Integer.toString(a));//0,转换为十进制
System.out.println(Integer.toString(b));//65535
System.out.println(Integer.toBinaryString(a));//0,转换为二进制
System.out.println(Integer.toBinaryString(b));//1111111111111111
//char用于存储单个字符,占用16位(2个字节)的内存空间
char c='中';
i=c; //因为字符是一个整数,所以char类型c可以赋值给int类型i
System.out.println(i); //20013 0x4e2d
System.out.println(c); //中
//结论:字符是一个数字,是字符的Unicode编码值
//println()方法根据参数类型的不同,采用不同的输出方式,整数输出整数,字符输出字符
System.out.println('B'); //B
System.out.println((int)'B');//66
int n='B'-'A'; //1
n='B'-'A'+10; //11
n='C'-'A'+10; //12
n='D'-'A'+10; //13
char ch='E';
int num=ch-'A'+10; //14
System.out.println(num);//14
ch='5'; //字符5
System.out.println(ch);
num=ch-'0';//数字5,因为编码按顺序编码,所以相减得数字5
System.out.println(num);//数字5
num=ch;
System.out.println(num);//53,num为int类型,字符5的Unicode编码
System.out.println((int)'5');//53
System.out.println((int)'0'); //'0'的编码为48
char chr='A'+3;
System.out.println(chr); //D,输出的是char类型
Random r=new Random(); //使用前,需要调用import java.util.Random;(导入java.util包中的Random类 )
int x=r.nextInt(26); //随机数X属于[0,26),即0~25的整数
chr=(char)('A'+x); // x为变量,所以需要对其运算进行类型定义
System.out.println(chr);//A~Z的随机数
char cx=0; //0
char cy='0';//48
//数值0和字符0不同
char xx='\'';
System.out.println(xx); //'
System.out.println((int)xx);//39,字符'的编码
xx='\\';
System.out.println(xx); // \
xx='\u4e2d';
System.out.println(xx); //中 Unicode编码
xx='\u0041';
System.out.println(xx); //A
xx='\u0000';
System.out.println(xx); //空(看不到)
System.out.println((int)xx); //0
System.out.println(0=='\u0000'); //true
System.out.println('0'=='\u0000'); //false
/*
Unicode编码: 'A'=41,'a'=97,'0'=48
转义字符:
\' 单引号
\" 双引号
\\ 反斜杠\
\t 制表符Tab(将光标移到下一个制表符位置)
\r 回车
\n 换行
*/
System.out.println("a\tb\nc"); //相当于a+制表位b+换行c
System.out.println('\n'); //空(看不到)
System.out.println((int)'\n'); //10,换行
System.out.println((int)'\r'); //13,回车
// System.out.println("\u0000");
// System.out.println("OK\u0000123");
// System.out.println("OK123\u0000");
System.out.println("\ufffe"); //?
boolean finished=true;
if(finished){
System.out.println("欢迎你再来!"); //欢迎你再来!
}
int nn='A'; //65
float m=nn;
System.out.println(m);//65.0,自动类型转换(隐式类型转换)
long l=1024L*1024*1024*4;//0x100000000,十六进制8个0
System.out.println(Long.toBinaryString(l));//100000000000000000000000000000000,二进制32个0
int ii=(int)l; //强制转换,l超出int的最大范围,(十进制下溢出2147483649,二进制下溢出最高位1)
System.out.println(ii);//0
System.out.println(Integer.toBinaryString(ii));//0
l=1024L*1024*1024*4+1;
ii=(int)l; //强制转换,溢出后剩下1
System.out.println(ii);//1
int aa=(int)45.23; //45,精度损失
byte bb=(byte)129; //-127,溢出2(溢出1:最小值,溢出2:最小值+1)
int ag = 256;
byte bg = (byte)ag; //0,数据溢出129(256-127=129),所以-128+(129-1)=0
System.out.println(bg);
/*
数据溢出:
某类型强制转换为byte类型 MAX=127 MIN=-128
溢出n=原来数-MAX
输出=(n-1)+MIN
*/
}
}