文章目录
- 说明
- 八大基本数据类型
- 整型
- 浮点型
- 字符型
- 布尔类型
- 类型转换
- java运算符
- 基础运算符
- 二元运算符
- 自增自减运算符
- 关系和boolean运算符
- 三元运算符
- 位运算符
- 运算符优先级
说明
这里介绍java的八大基本数据类型和运算符
八大基本数据类型
java中有八大数据类型,4个整型,2个浮点型,一个字符型和一个布尔型
整型
// 整型为 byte、short、int、long,这4个分别是1、2、4、8个字节,
// 全部都是有符号的,没有unsigned
byte a = 1;
short b = 1;
int c = 1;
long d = 1;// 1l or 1L
对于基本数据类型,我们还可以使用2、8、16进制来进行表示
// 二进制表示
int e = 0b1; // 二进制使用0b或者0B开头,表示为二进制的1,也可以写成0B1
int f = 0b1_1_1; // 二进制还可以使用_进行分隔,表示得更加清晰,f的值为7
// 八进制表示
int g = 010; // 八进制使用0开头,g的值为8,比较容易混淆,不建议使用
// 十六进制表示
int h = 0x11; // 十六进制使用0x或者0X开头,h的值为17
浮点型
// 浮点型为 float、double,这2个分别为4、8字节
float i = 1.1f; //或者 1.1f
double j = 1.1; // 或者1.1d、1.1D
注意:小数默认是double
在浮点数中还有3个特殊的值,分别是无限大、无限小、不是数字
double x = Double.POSITIVE_INFINITY; // 这个值表示无穷大 例如1.0 / 0.0
double y = Double.NEGATIVE_INFINITY; // 这个值表示无穷小 例如-1.0 / 0.0
double z = Double.NaN; // 表示不是一个数字,例如0.0 / 0.0
字符型
字符型使用char标识
char k = 'a'; // char类型 使用 '',里面为任意单一字符
对于字符,下面有一些说明
java中内码(运行内存)中的char使用UTF16的方式编码,一个char占用两个字节,
但是某些字符需要两个char来表示。所以,一个字符会占用2个或4个字节。
java中外码中char使用UTF8的方式编码,一个字符占用1~6个字节。
UTF16编码中,英文字符占两个字节;绝大多数汉字(尤其是常用汉字)占用两个字节,
个别汉字(在后期加入unicode编码的汉字,一般是极少用到的生僻字)占用四个字节。
UTF8编码中,英文字符占用一个字节;绝大多数汉字占用三个字节,个别汉字占用四个字节。
(参考于https://www.cnblogs.com/fnlingnzb-learner/p/7272348.html)
// 字符也可以使用\+u+4个16进制值来表示
// 在注释中别把\和u写在一起
char l = '\u1111';
布尔类型
布尔型为boolean
boolean m = true; // boolean的值只能为true和false
下面是boolean的一些说明
boolean类型被编译为int类型,等于是说JVM里占用字节和int完全一样,int是4个字节,于是boolean也是4字节
boolean数组在Oracle的JVM中,编码为byte数组,每个boolean元素占用8位=1字节
(参考于https://blog.csdn.net/amoscn/article/details/97377833)
类型转换
各个类型的关系如下
实线表示进行转换没有精度丢失,虚线表示会有精度丢失。箭头方向会自动转换,反方向都需要进行强转,并且可能会存在精度丢失,下面有几个例子
int a = Integer.MAX_VALUE;
// 箭头方向都会进行自动转换,b没有精度丢失,c会丢失精度
long b = a;
float c = a;
System.out.println("a=" + a);
System.out.println("b=" + b);
System.out.println("c=" + c);
输出如下
a=2147483647
b=2147483647
c=2.14748365E9
还有一个例子如下,表面箭头反方向需要进行强转
int a = 1000;
int b = 100;
// 箭头反方向需要进行强转转换
// 如果超出该数据类型的最大值就会造成精度丢失
byte c = (byte) a;
byte d = (byte) b;
System.out.println("a=" + a);
System.out.println("b=" + b);
System.out.println("c=" + c);
System.out.println("d=" + d);
输出如下
a=1000
b=100
c=-24
d=100
java运算符
基础运算符
java中 使用 +、-、*、/、% 来表示 加、减、乘、除、取余
二元运算符
二元运算符 +=,-=,*=,/=,%=。
int a = 1;
a += 1; // 等价于 a = a + 1,其他也是类似的
自增自减运算符
自增 a++、++a都表示将a的值加1. a–、–a表示将a的值减1
a++和++a的区别为在进行运算的时候,a++会在运算之后将a的值加1,而++a会将a的值加1后进行运算, a–和–a也是类似的
int b = 1;
int c = b++; // c的值为1,b的值为2
b = 1;
int d = ++b; // d的值为2,b的值也为2
关系和boolean运算符
- ==用于比较是否相等,!=检测不相等,还有如 >(大于) >=(大于等于) <(小于) <=(小于等于)
- &&表示逻辑与,|| 表示逻辑或,都是按照短路方式进行求值的,就是当第一个表达式满足时,第二个表达式就不会计算了
三元运算符
使用 ? :
c = 表达式 ? a : b, 如果表达式为true,那么c就会为a,否则c为b
位运算符
|表示或,&表示与,^表示异或,~表示取反
如果|和&应用在布尔值上时,和||和&&是类似的,但没有短路机制
>>表示右移,<<表示左移,
移位运算符会对操作数进行模32的操作(如果是long就是64)
相当于 1<<35 和 1 << 3是相等的
>>> 和 >> 一样的,但是>>>用0填充高位,而>>使用符号位填充高位