目录
----------------------------------------------------------------------我是分割线-----------------------------------------------------------------------------------
Java中一共有两大类数据类型:
1.基本数据类型(4类八种)
整型:
所占内存 取值范围
字节型 byte 1个字节 -128-127
短整型 short 2个字节 +-30000左右
整型 int 4个字节 +-21亿
长整型 long 8个字节 不得了
浮点型:
单精度浮点型 float 4个字节 详细取值范围见下图
双精度浮点型 double 8个字节
字符型:
字符型 char 2字节
布尔型:
布尔型 boolean 1字节 true/false
tip:1.8E20 代表 1.8*10的20次方
2.引用数据类型
String (字符串)、类、接口等
提到String,便想起了 == 和 equals的区别,有时间专门整一下子,其实这些度娘那有一大把,我这就是用最简单的语言表述一下
3.基本类型和引用类型的区别
引用类型的存储原理:
基本数据类型 都是直接存储在内存中的内存栈上的,数据本身的值就是存储在栈空间里面
引用类型 继承于Object类(也是引用类型)都是按照Java里面存储对象的内存模型来进行数据存储的,使用Java内存堆和内存栈来进行这种类型的数据存储,简单地讲,“引用”是存储在有序的内存栈上的,而对象本身的值存储在内存堆上的;
4.数据类型转换
public static void main(String[] args) {
//自动类型转换,小范围--->大范围
long c =5;//int 5自动转换成long类型
System.out.println(c); //5
//强制转换类型 大范围--->小范围 ,精度可能损失
long c1=10L;
int b =(int)c1;
//double和float的经度范围不同
double d =3.12345678999999999;
float f =(float)d;
System.out.println(f); //3.1234567
int a2 =(int)1000000000000000L;
System.out.println(a2);//-1530494976 精度损失
char b2 ='中';
int b3=b2;
System.out.println(b2);//中
System.out.println(b3);//20013
}
5.运算符
1.算术运算符
+: 加
a.求2个数的和
i.如果是两个类型一样的数据,直接求和
ii.如果两个类型不一样的数据.先转成一样,在求和
a.如果是byte,char,short 那么无条件先转成int
b.如果是多个类型相加,那么最后的结果是最宽的类型
c.所有小数相加,得到都是近似值
b.连接一个字符串和另外一个任意数据,得到连接后的新字符串
-: 减
求两个数差
*: 乘
求两个数积
/: 除
求两个数的商
如果两个数都是整数,那么结果肯定是整数
%: 取模/求余数
10 % 3 结果是 1
++:自增
自增运算符只能用于变量
格式:
++变量名;
变量名++;
作用: 都是让该变量的值增加1
++在前和在后的区别:
a.如果 变量名++ 或者 ++变量名 是单独一个式子 那么没有任何区别
b. 如果 变量名++ 或者 ++变量名 不是单独一个式子
口诀: ++在前,先加后用
++在后,先用后加
--:自减
自减运算符只能用于变量
格式:
--变量名;
变量名--;
作用:让变量的值减少1
--在前和在后的区别:
a.如果 变量名-- 或者 --变量名 是单独一个式子 那么没有任何区别
b. 如果 变量名-- 或者 --变量名 不是单独一个式子
口诀:--在前,先减后用
--在后,先用后减
扩展:编译器的优化
a.对byte short 赋值时,编译器会优化,只要数值没有超过范围 那么没有问题
byte b = 10;
short s = 11;
b.如果是常量相加,编译器阶段直接计算
byte b = 1 + 2; // 编译器会直接计算出 3
c.如果是变量相加,编译器不会优化
byte b1 = 1;
byte b2 = 2;
int b3 = b1 + b2; //变量相加不优化,所以结果是int类型
int b4 = b1 + 2; //变量相加不优化,所以结果是int类型
int b5 = 1 + b2; //变量相加不优化,所以结果是int类型
2.赋值运算符
=: 最简单的赋值运算符
int a = 10;
一个变量可以无数次赋值,但是该变量最终只能保存一个值,最后一次赋的值
int a = 10;
+=:
a+=10; ====> a = a+10
注意: += 具有强转功能
比如 byte b = 10;
b+=1;
// b = (byte)(b + 1);
tip: short、char、byte进行运算是自动转化成了int类型
3.比较运算符
比较运算符 最后结果是 boolean类的值
>
<
>=
<=
==
!=
4.逻辑运算符
使用逻辑运算符 只能计算两个boolean类型数据,其结果还是boolean
&&: 短路与 口诀:全真为真(一假则假)
||: 短路或 口诀:全假为假(一真则真)
! : 非 单目运算符, 口诀: 取反
^ : 异或 口诀:相同为假(不同为真)
短路与 和 短路或 中 "短路"的含义
false && 后面编译器是不看的
true || 后面编译器是不看的
5.三目/元运算符
符号: ? :
格式:
boolean类型值?值1:值2
结果: 如果boolean类型的值是true ,那么结果就是值1
如果boolean类型的值是false,那么结果就是值2
这个三元运算很简单,但是等到用的时候总是想不起来,还是一直再用if..else 蓝廋!