1.1、基本数据类型
1.2、引用数据类型
2.1、数值类型
(1)byte:1个字节8位
①byte b = (byte)128; System.out.println(b);输出结果为:-128;因为最大为127 即01111111;128=01111111+00000001=1111111;即-128第一位0表示正数;1表示负数;byte b = 128; System.out.println(b);会报错
②两个byte类型的整数相加,结果是int类型。
③依次定义相同数据类型的变量:byte a=1,b=2,c=3;
(2)short:2个字节16位
(3)int:4个字节32位
(4)long:8个字节64位
①使用时应该在后尾+L;
②八进制:以0开头的数值;例:int a = 012;
③十六进制:1 2 3 4 5 6 7 8 9 a b c d e f ;以0x开头数值;例:int a =0x10;long a = 0x12abL;
2.2、浮点类型
(1)float:4个字节32位
(2)double:8个字节64位
(3)其他补充
① Java中默认的浮点类型为double;所以不能直接将带小数点的数值赋值给float类型。
② Float f1 = 12.34;会报错。正确写法:float f1 = 12.34f;
③ Double d1 = 12.34;此句不会报错,因为默认类型就是double类型。
2.3、字符类型
(1)char:2个字节16位
(2)char 类型的值必须写在‘ ’内,并且只有一个字符,例:char a = ‘A’;
(3)其他补充
① Java中默认的浮点类型为double;所以不能直接将带小数点的数值赋值给float类型。
② Float f1 =12.34;会报错。正确写法:float f1 = 12.34f;
③ Double d1 = 12.34;此句不会报错,因为默认类型就是double类型。
2.4、布尔类型
boolean:1个字节8位、只有true与false两种类型。
2.5、八种基本数据类型对应的封装类
基本类型 | byte | short | int | long | float | double | char | boolean |
---|---|---|---|---|---|---|---|---|
封装类 | Byte | Short | Integer | Long | Float | Double | Character | Boolean |
3.1、类(class)
(1)byte:1个字节8位
(2)short:2个字节16位
(3)int:4个字节32位
(4)long:8个字节64位
3.2、接口(interface)
(1)float:4个字节32位
(2)double:8个字节64位
3.3、数组
(1)一维数组的声明方式
① int[] arr = {3,1,2,5,6}
② int[] arr = new int[]{3,1,2,5,6}
③ int[] arr = new int[5];//此时会赋默认的值
④ int arr[] = new int[5]; //不推荐
(2)二维数组的声明方式
① int[][] arr1 = { { 3, 2, 7 }, { 1, 5 }, { 6 } };
② int[][] arr2 = new int[3][4]; // 3行4列的规则数组
③ int[][] arr3 = new int[2][];
④ int arr[] = new int[5]; //不推荐
注意:当数组里面的值为空时,去查找这个值时会出现空指针。如下举例:int[] arr1 = null;arr[0] = ; // 数组是引用类型,值为null时使用数组将抛出NullPointerException异常
4.1、对字符串正确赋初值的三种方式
① String str;
② String str = “good!”;在字符串常量池中
③ String str = new String(“good!”);在字符串常量池和堆中都创建对象。
(1)、将小类型直接赋值给大类型的变量,不需要进行声明式的转换。将精度低的类型直接赋值给精度高的类型
(2)、将int类型转byte类型 、将int类型转short类型, 如果int类型的数据值没有超过byte类型、short类型取值范围的最大值,则会自动类型转换;例如:byte a = 35;无需写成byte a = (int)35;除了int、byte、short这三个类型之外的大类型转小类型,都需要强制转换。
(3)、这样写,就不会再进行隐式类型转换了:int f=35; byte s=f;会报错;需要改为byte s=(int)f;还有下面这种情况:byte i=1;byte a=i+10;这句就会报错,因为只要右边不是单纯的数字相加,含有变量,就不会再进行自动类型转换了,此时需要强制类型转换:byte a= (byte)(i+10);
(4)、一旦char类型的变量进行了数学运算,那么字符就会按照一定的规则翻译成一个数字。
(5)、 byte+byte会自动提升为int+int;然后再进行运算,所以两个byte类型的变量进行运算的时候,要用int类型的变量进行接收;例如:byte a=1;byte b=2;int c = a+b
注意:a+=b和a=a+b的区别:
① a+=b是自动转化类型,a = a+b则不会自动转化,需要手动进行强制类型转化。
② b1+=b2;不需要强制转换,会直接将结果转为目标类型,不会报错。
③ byte b,b1=2,b2=5;b=(byte)(b1+b2);需要强制转换,不然会报错。如果是:byte b; b=1+1;此句不会报错,因为1+1优先级比=高,所以先是运算1+1;然后直接将2赋值给了b,所以不会报错,是正确的表达。
④ a+=b是自动转化类型,a = a+b则不会自动转化,需要手动进行强制类型转化。
总结:+=、-=、*=、/=、%=:可以直接将结果转为目标类型,不需要强制类型转换。
其它补充: 如果被转换变量的值超过目标类型的最大值,超出部分从目标类型的最小值进行累加。例:int i = 129; byte b = (byte)i;System.out.println(b);输出结果为-127;因为byte类型最小值为-128,129超出最大值127两位数,即2;则从最小值往前数2位:-128、-127;所以输出为-127;
(1)、将大类型转小类型 、将精度高的类型转精度低的类型,指基本数据类型之间的转换,在某种情况下会丢失精度.
(1)、小类型和大类型进行操作结果是大类型
(2)、精度低的类型与精度高的类型进行操作结果是精度高的类型
(3)、分析System.out.println(a+ 1+"")与System.out.println(“”+a+ 1);例如:int a =300;System.out.println(a+ 1+""); System.out.println(“”+a+ 1); System.out.println(“”+a+ 1);输出结果分别为:301;3001
注意:double类型、float类型转int类型的时候,并不会对数据四舍五入,而是会把小数部分全部舍弃掉,只保留整数部分数值。
(1)、“” + 基本数据类型
(2)、String.valueOf(参数);参数可以为基本数据类型。
(3)、将基本数据类型转为封装类对象,通过封装类对象toString0;(不推荐) 。例如:Integer inte = i; String str2 = inte. toString();
5.1、第一种方式(直接)
(1)String类型转换为byte类型:Byte封装类中的parseByte()方法
(2)String类型转换为byte类型数组:String字符串.getBytes();
(3)String类型转换为short类型:Short封装类中的parseShort()方法
(4)String类型转换为int类型:Integer封装类中的parseInt()方法
(5)String类型转换为long类型:Long封装类中的parseLong()方法
(6)String类型转换为float类型:Float封装类中的parseFloat()方法
(7)String类型转换为double类型:Double封装类中的parseDouble()方法
(8)String类型转换为char类型:不能直接转换,要将字符串转化为char类型的数组的ToCharArray()方法
(9)String类型转换为boolean类型:Boolean封装类中的parseBoolean方法,只有字符串的值是true时(不区分大小写),结果才是true,否则都是false
5.2、第二种方式(间接)
(1)通过封装类,先将字符串转为封装类对象。然后通过拆箱操作或者封装类对象.xxxValue();
6.1、a+=b和a=a+b的区别
(1)a+=b是自动转化类型,a = a+b则不会自动转化,需要手动进行强制类型转化。
(2)总结:+=、-=、*=、/=、%=:可以直接将结果转为目标类型,不需要强制类型转换。
(3)二者举例对比
① b1+=b2;不需要强制转换,会直接将结果转为目标类型,不会报错。
② byte b,b1=2,b2=5;b=(byte)(b1+b2);需要强制转换,不然会报错。
③ 如果是:byte b; b=1+1;此句不会报错,因为1+1优先级比=高,所以先是运算1+1;然后直接将2赋值给了b,所以不会报错,是正确的表达。
6.2、其他补充
(1)如果被转换变量的值超过目标类型的最大值,超出部分从目标类型的最小值进行累加。例:int i = 129; byte b = (byte)i;System.out.println(b);输出结果为-127;因为byte类型最小值为-128,129超出最大值127两位数,即2;则从最小值往前数2位:-128、-127;所以输出为-127;