欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java的八大数据类型

程序员文章站 2022-07-15 10:38:22
...

数据类型

    java一共有八大数据类型,四个整型,两个浮点型,一种用于表示Unicode编码的字符单元的数据类型char和一种用于表示真值的boolean类型。

   3.1  整型

类型 存储需求 取值范围
int 4字节 -2147483648 ~ 2147483647
short 2字节 -32768 ~ 32767
long 8字节 -9223372036854775808 ~ 9223372036854775807
byte 1字节 -128 ~ 127

    注意:从java7开始,加上前缀0b或0B就可以写二进制数

    注意: long类型的最后面需要加个L或l

    3.2 浮点类型

         
类型 存储需求 取值范围
float 4字节 大约±3.40282347E±38F(有效位数为6 ~ 7位)
double 8字节 大约±1.79769313486231570E±308(有效位数为15位)
        注意:float类型的数字后面必须加上f或F,否则会报错。例如3.14F。两种浮点类型的第一位是符号位,后面8位是指数位,剩下的才是有效位数

    3.3  char类型

           char类型的值可以表示位十六进制值,范围从\u0000到\Uffff,例如\u2122表示注册号(TM)。\u03C0表示希腊字母π。需要注意的是,char类型无视任何位置,只要在文档中,他就会执行。

             3.3.1  Unicode和char类型
                   在这里我们探究UTF-16 具体是怎样编码的。
          我们先来解释一下什么叫码点,码点是指与一个编码表中的某个字符对应的代码值。在Unicode标准中码点采用 十六进制,并加上前缀U+,例如U+0041就是拉丁字母A的码点。UTF-16编码采用不同长度的编码单元表示所有的Unicode码点,一开始是16位的char,只有65535个,后来因为超过了预算,然后改成了利用码点分成的17个代码级别来扩展字符。
       3.3.2 boolean类型
        boolean类型有两个值:false和true,用来判定逻辑条件。整形值和布尔值之间不能进行相互转换

3.4  变量

double salary;

int vacationDays;

变量名中所有的字符都是有意义的,并且大小敏感。另外,不能使用Java保留字作为变量名,可以在一行中声明多个变量

3.4.1  变量初始化
        int i = 9 ;
        int  i;    i= 10;
        声明一个变量后,必须用赋值语句对变量进行显示初始化。千万不要使用把未出未初始化的变量。
        最后,在Java中可以将声明变量放在代码中的任何地方。但是不要放在使用它的的后面,也尽量建议靠近第一次使用它的地方。

        其中,++和--和-=和+=运算符的示例如下;

public class FirstSample {
		
	public static void main(String[] args) {
		int x = 3;
		System.out.println(x++); 	//3
		System.out.println(x);          //4
		System.out.println(x--);	//4
		System.out.println(x);	        //3	
		
		System.out.println(++x); 	//4
		System.out.println(x);          //4
		System.out.println(--x);	//3
		System.out.println(x);	        //3	
		
		x+=5;
		System.out.println(x);          //8
		x-=3;
		System.out.println(x);          //5
	}
	
}

        3.4.2  常量
             在Java中,利用关键字final指示常量。例如:
 public static final double ABC = 2.54;

            习惯上,常量名使用全大写,公共的常量要加static 和  final防止被改变。

   3.5  运算符

        在mian方法中的所有指令都将使用严格的浮点运算,如果将一个类标记为sctrctfp,这个类中的所有方法都要使用严格的浮点运算。例如:

public static strictfp void main(String[] args) {}
        3.5.1  数学函数与常量
            pow(double a,,double b) -->a的b次幂
            sqrt(double a)  --> a的平方
            还有以下常用的三角函数:
            Math.sin     Math.cos  Math.tan    Math.atan     Math.atan2  
         3.5.2   数据类型之间的转换、
    

             隐式转换
      A: 案例演示
        a: int + int
        b: byte + int
     B: Java中的默认转换规则
        取值范围小的数据类型与取值范围大的数据类型进行运算,会先将小的数据类型提升为大的,再运算

    C: 画图解释byte+int类型的问题

        首先, 我们知道byte在内存中占一个字节, 而一个字节等于8个比特位(二进制位). 1 byte = 8 bit

        int在内存里是占四个字节.


Java的八大数据类型

        3.5.3  强制转换
            强制转换
    A: 强制转换问题
        int m = 10;
        byte n = 20;
        n = m + n;
    B: 强制转换的格式
        n = (byte) (m + n);        
    C: 强制转换的注意事项
        如果超出了被赋值的数据类型的取值范围得到的结果会与你期望的结果不同

public static void main(String[] args) {
		int x = 3, y = 2;
		byte b = 4;
		x = x + b;
		System.out.println("隐式转换:");
		System.out.println(x + y);		// 9
		System.out.println(x);			// 7
		
		int m = 127;
        byte n = 1;
        n = (byte) (m + n);				// 注意byte的取值范围为-128~127
		System.out.println("强制转换:");
		System.out.println(n);			// 结果不是128, 而是-128
	}

因为127的二进制数值为   01111111   补码还是它本身

1的二进制数为00000001    补码还是它本身

两者相加  得10000000  减一 得   11111111  然后原码得   10000000

因为128在二进制里和0里表示同一个数,所以最后的结果为-128.

3.6 关系和boolean运算符

        关系运算符有 == (检测相等)!=(不等)>(大于)<(小于)>=(大于等于)<=(小于等于)还有&&(与)和||(或)运算符。

                   int k = 9;
		int j = 8;
		int s = 9;
		System.out.println(k == j);	//false
		System.out.println(k == s);	//true
		System.out.println(!(k == s));	//false
		//&&表示两个都是true才是true
		//||表示有一个为true才是true
		System.out.println(k == 9 && j == 9);	//false
		System.out.println(k == 9 || j == 9);	//true

然后是三元运算符。就是   a?b c:d   就是判断?的真假,如果为真则返回c,否则返回d,例如

System.out.println((8 > 9) ? 3 : 8);	//8

3.7 位运算符

        处理整数类型时,可以直接对组成整数值的各个位完成操作。这些运算符为&(and)、|(or)、^(xor)、~(not)

        例如,

int g = (127 & 0b1000);
System.out.println(g);

        相当于

        01111111

    +  00001000

-------------------------

          00001000

        所以他的输出为8;

        另外,还有>>  和  << 运算符可以将二进制的位数移动,例如  

    System.out.println(128 >> 3);
    System.out.println(128 << 3);

        相当于  10000000  将1向由移动3位,  变成 00010000,相当于16

                     10000000  将1向左移动三位,变成  100 00000000,相当于1024

3.8  枚举类型

          有时候,变量的取值只在一个有限的集合内。例如:销售的服装或比萨饼只有小、中、大和超大这四种尺寸。当然,可以将这些尺寸分别编码为1、2、3、4或S、M、L、X。但这样存在着一定的隐患。在变量中很可能保存的是个错误的值 ( 如0或m)。

            针对这种情况,可以自定义枚举类型。枚举类型包括有限个命名的值。例如

    public enum Size {
	S,M,L,XL,XXL,XXXL
    }

    Size s = Size.XXL;
    system.out.println(s);
            输出结果为XXL。这样的枚举类型比较方便。安全性高。