文章目录

  • 说明
  • 八大基本数据类型
  • 整型
  • 浮点型
  • 字符型
  • 布尔类型
  • 类型转换
  • 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编码中,英文字符占用一个字节;绝大多数汉字占用三个字节,个别汉字占用四个字节。
(参考于)

// 字符也可以使用\+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字节
(参考于)

类型转换

各个类型的关系如下

java八进制转换为十进制 java八进制表示_开发语言


实线表示进行转换没有精度丢失,虚线表示会有精度丢失。箭头方向会自动转换,反方向都需要进行强转,并且可能会存在精度丢失,下面有几个例子

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运算符

  1. ==用于比较是否相等,!=检测不相等,还有如 >(大于) >=(大于等于) <(小于) <=(小于等于)
  2. &&表示逻辑与,|| 表示逻辑或,都是按照短路方式进行求值的,就是当第一个表达式满足时,第二个表达式就不会计算了

三元运算符

使用 ? :

c = 表达式 ? a : b, 如果表达式为true,那么c就会为a,否则c为b

位运算符

|表示或,&表示与,^表示异或,~表示取反
如果|和&应用在布尔值上时,和||和&&是类似的,但没有短路机制

>>表示右移,<<表示左移,
移位运算符会对操作数进行模32的操作(如果是long就是64)
相当于 1<<35 和 1 << 3是相等的

>>> 和 >> 一样的,但是>>>用0填充高位,而>>使用符号位填充高位

运算符优先级

java八进制转换为十进制 java八进制表示_java_02