把JAVA的知识点在回顾回顾,要不然都忘掉了。
基本数据类型:4类8种
整数型
byte 1 -128~127
short 2
int 4
long 8
浮点型
float 4
double 8
字符型
char 2
布尔型
boolean 1
内存空间不同 取值范围不同
byte 内存空间8
short 内存空间16
int 内存空间32
long 内存空间64
float 内存空间32
double 内存空间64
1:在定义Long或者Float类型变量的时候,要加L或者f。
整数默认是int类型,浮点数默认是double。
byte,short在定义的时候,他们接收的其实是一个int类型的值。
这个是自己做了一个数据检测的,如果不再它们的范围内,就报错。
2:byte值的问题 -128~127
一个字节 01111111 127
byte b1 = 127;
byte b2 = (byte)128; //-128
byte b3 = (byte)129; //-127
byte b4 = (byte)130; //-126
byte的范围:-128 ~ 127
127 01111111
-127: 11111111
+1
------------------------
10000000
-128:10000000 (最高位即是符号位,也是数值位)只有在临界的时候
3:数据类型转换之默认转换 小的数据类型到大的数据类型
byte,short,char -- int -- long -- float -- double
long: 8个字节
float:4个字节
A:它们底层的存储结构不同。
B:float表示的数据范围比long的范围要大
long: 2^63-1
float:3.4*10^38 > 2*10^38 > 2*8^38 = 2*(2^3)^38 = 2*2^114 > 2^63-1
4:Java语言中的字符char可以存储一个中文汉字吗?为什么呢?
可以。因为java语言中的字符占用两个字节。
Java语言采用的是Unicode编码。
常量: 在程序执行过程中其值不发生改变的量
分类:
字面值常量
字符串常量
整数常量
小数常量
字符常量 里面只能是单个字符
布尔常量 true和false
空常量 数组
自定义常量
进制:x进制就是 逢x进一
二进制 由0,1组成 0b
八进制 由0-7组成 0
十进制 整数默认都是十进制
十六进制 由0-9,a-f(可以是大写) 0x
进制转换
任意进制转换十进制
位权展开法
十进制转换成任意进制
除基取余,直到商为零,余数反转
快速转换
8421码 二进制与十进制的转换
二进制快速转换八进制 分组法
二进制快速转换十六进制 分组法
原码,反码,补码
存在计算机底层 是二进制的运算
数据运算的时候用的是该数据的二进制的补码进行计算的
展示用的是该数据的二进制原码
正数的原反补都一样,最高位是符号位0 其余位是数值位
负数 原码 最高位符号位1,其余位是数值位
反码 最高位不变,其余位按位取反
补码 反码+1
变量:
在程序执行过程中,在一定范围内其值可以发生改变的量
相当于数学中的未知数
定义格式 :
数据类型 变量名 = 初始值;
同类型的常量
java中存在 隐式转换(默认转换)
(1): boolean类型不能转换为其他的数据类型
(2): byte,short,char—int—long—float—double
(从小的范围往大的范围转)
如果遇到int类型参与运算 得到的结果肯定是int类型
如果有long参与运算,得到的结果肯定是long类型
如果有float参与运算,得到结果肯定是float类型
如果有double参与运算,得到结果肯定是double 类型
(3): byte,short,char之间不转换,他们参与运算首先转换为int类型
注意:大类型 转 小类型 可能会损失精度。
public class DataTyepDemo { public static void main(String[] args) { byte a = 3; int b = 4; int c = a+b; System.out.println(c); } }
还有强制类型转换
public class DataTyepDemo1 { public static void main(String[] args) { byte a =3; int b = 4; byte c = (byte) (a+b); System.out.println(c); } }
你发现 字符 对应 int类型 应该有 一一对应的关系
在一个表内
ASCII
‘0‘ 48
‘a‘ 97
‘A‘ 65
public class DataTypeDemo2 { public static void main(String[] args) { System.out.println("hello" + ‘a‘ +1 ); System.out.println(‘a‘ + 1 + "hello"); System.out.println("-------------"); System.out.println("5+5="+5+5); System.out.println(5+5+"=5+5"); } }
结果:
helloa1
98hello
-------------
5+5=55
10=5+5
变量使用的注意事项
a:作用域问题
变量定义在哪一级大括号中,哪个大括号的范围就是这个变量的作用域。
相同的作用域中不能定义两个同名变量。
b:初始化值问题
没有初始化值不能直接使用
c:在一行上建议只定义一个变量
可以定义多个,但是不建议
变量定义格式
数据类型 变量名 = 初始化值;
数据类型 变量名;
变量名 = 初始值;
public class DateTypeNoticeDemo { public static void main(String[] args) { int a = 10; int b = 10; System.out.println(a); System.out.println(b); } }
public class DataTypeTest { public static void main(String[] args) { byte b = (byte) 130; System.out.println(b); } }
/* 分析: 130 int 类型 4个字节 32bit 原码 00000000 000000000 00000000 10000010 强制转换就是一种运算 对补码 进行强制转换 补码 00000000 000000000 00000000 10000010 强制转换之后得到 10000010 --------补码 10000001 --------反码 11111110 ---------原码 -126 */
public class DataTypeTest2 { public static void main(String[] args) { float f1 = (float)12.345; //这里面 12.345常量是double类型 8个字节 //做了强转之后 再赋值给float类型变量 System.out.println(f1); float f2 = 12.345f; //这里 12.345常量就是float类型的 直接做赋值 System.out.println(f2); } }
放在操作数前面
先自加(减) 然后再参与运算
放在操作数后面
先参与运算 然后自加(减)
public class DataTypeTest3 { public static void main(String[] args) { int a = 10; int b = 10; int c = 10; a = b++; //a 10 b 11 c 10 c = --a; //a 9 b 11 c 9 b = ++a; //a 10 b 10 c 9 a = c--; //a 9 b 10 c 8 System.out.println("a:"+a); System.out.println("b:"+b); System.out.println("c:"+c); } }
比较运算符
public class OperatorDemo { public static void main(String[] args) { int a = 32; int b =23; System.out.println(a==b); System.out.println(a>b); System.out.println(a!=b); System.out.println(b>=a); } }