02-数据类型-基本数据类型
数据类型
Java数据类型分为两大类,基本数据类型和引用类型。
每一种数据都定义了明确的数据类型,在内存中分配了不同大小的内存空间(字节)。
基本数据类型:byte[1]、short[2]、int[4]、long[8]、float[4]、double[8]、char[2]、boolean[1]。
引用类型:类(class)、接口(interface)、数组([])。
这里需要注意,String不属于八种基本数据类型,String是一个对象,实际上是通过使用字符数组来存储数据的。
1.基本数据类型
整数类型(byte、short、int、long)
Java的整数类型就是用于存放整数值的,比如5,10,15,20
a) Java各整数类型有固定的范围和字段长度,不受具体操作系统的影响,以保证Java程序的可移植性。
b) Java的整型常量默认为int型,声明long型常量,须后加“l”或"L"
c) Java程序中变量常声明为int型,除非不足以表示大数,才使用long型
d) bit:计算机中最小的存储单位。byte:计算机中基本存储单元。1byte = 8bit。
public class IntDetail{ public static void main(String[] args){ //Java的整型常量(具体值)默认为int型,声明long型常量,须后加“l”或"L" int n1 = 1; //4个字节 System.out.println("数据类型:"+getType(n1)); //int n2 = 1L; (错误: 不兼容的类型: 从long转换到int可能会有损失) long n3 = 1L; //8个字节 System.out.println("数据类型:"+getType(n3)); } //获取变量类型方法 public static String getType(Object o){ //使用int类型的getClass()方法 return o.getClass().toString(); } }
浮点类型(float、double)
Java的浮点类型可以表示一个小数,比如3.14,12.56
a) 与整数类型类似,Java浮点类型也有固定的范围和字段长度,不受操作系统的影响,,以保证Java程序的可移植性。
b) Java的浮点型常量默认为double型,声明float型常量,须后加"f"或"F"
c) 浮点数在机器中的存放形式,浮点数 = 符号位 + 指数位 + 尾数位
符号位:判断当前数字是正数还是负数,0表示正数,1表示负数
指数位:float和double的范围是由指数的位数来决定的
尾数位:float和double的精度是由尾数的位数来决定的
d) 尾数部分可能丢失,造成精度损失(小数都是近似值)
单精度float:1bit符号位、8bit指数位、23bit尾数位
双精度double:1bit符号位、11bit指数位、52bit尾数位
public class FloatDetail{ public static void main(String[] args){ //Java的浮点型常量(具体值)默认为double型,声明float型常量,须后加"f"或"F" //float num1 = 1.1; (错误: 不兼容的类型: 从double转换到float可能会有损失) float num2 = 1.1F; //4个字节 System.out.println("数据类型:"+getType(num2)); double num3 = 1.1; //8个字节 System.out.println("数据类型:"+getType(num3)); double num4 = 1.1F; //这个可以编译通过,8个字节的变量可以存放四个字节的数据 System.out.println("数据类型:"+getType(num4)); //科学计数法 System.out.println(5.12e2); //5.12*10^2 = 512.0 System.out.println(5.12E-2); //5.12*10^(-2) = 0.0512 } //获取变量类型方法 public static String getType(Object o){ //使用int类型的getClass()方法 return o.getClass().toString(); } }
字符类型(char)
字符类型可以表示单个字符,字符类型是char,char是两个字节(可以存放汉字),多个字符用字符串String
a) 字符常量是用单引号('')括起来的单个字符,例如char c1 = 'a'; char c2 = '任';
b) Java中允许使用转义字符'\'来将其后的字符转变为特殊字符型常量,例如char c3 = '\n';
c) Java中,char的本质是一个整数,可以直接给char赋一个整数,在输出时会按照对应unicode码输出
d) char类型是可以进行运算的,相当于一个整数,因为都有其对应的unicode码
这里需要注意,定义一个char字符类型变量,一定要用单引号,而不是双引号。
public class CharDetail{ public static void main(String[] args){ //Java中,char的本质是一个整数,在默认输出时,会按照对应unicode码输出 //输出对应的数字,可以(int)字符 char c1 = 97; System.out.println("97对应的unicode码是:"+c1);//'a' //输出'a'所对应的unicode码值 char c2 = 'a'; System.out.println("'a'对应的unicode码值是:"+(int)c2);//97 char c3 = '任'; System.out.println("'任'对应的unicode码值是:"+(int)c3);//20219 //char类型是可以进行运算的 System.out.println('a'+10);//107,'a'所对应的unicode码值是97 System.out.println("a"+10);//a10,当+号左右两边有一方为字符串,则做拼接运算 } }
布尔类型(boolean)
布尔类型也叫boolean类型,boolean类型数据只允许取值true和false,无null。
boolean类型适用于逻辑运算,一般用于程序流程控制。
这里需要注意,Java中不可以用0或非0的整数代替false和true,这点与C、Python语言不同。
public class Boolean01{ public static void main(String[] args){ //演示判断成绩是否通过的案例 //定义一个布尔变量 boolean isPass = true; if(isPass == true){ System.out.println("考试通过,恭喜"); }else{ System.out.println("考试没有通过,下次努力"); } } }
基本数据类型转换(自动类型转换和强制类型转换)
1.自动类型转换
当Java程序在进行赋值或者运算时,精度小的类型自动转换为精度大的数据类型,这个就是自动类型转换。
这里需要注意,(byte,short)和char之间不会相互自动转换,但byte,short,char三者可以计算,在计算时首先转化为int类型。
public class AutoConvert{ public static void main(String[] args){ //演示自动类型转换,精度小的类型自动转换为精度大的数据类型 int num = 'a'; //ok,int > char double d1 = 80; //ok,double > int //有多种类型的数据混合运算时, //系统首先自动将所有数据转换成精度大的数据类型,然后再进行计算 int n1 = 10; //float d1 = n1 + 1.1; //错误,Java的浮点型常量默认为double型,n1 + 1.1 => 结果类型是double float d2 = n1 + 1.1F; //ok,n1 + 1.1F => 结果类型是float double d3 = n1 + 1.1; //ok,n1 + 1.1 => 结果类型是double //当我们把精度大的数据类型赋值给精度小的数据类型时, //就会报错,反之就会进行自动类型转换 //int n2 = 1.1; //错误,int < double char c1 = 97; //ok,虽然char < int ,但是当给char赋一个整数时,会转换为对应的unicode码 //思考(如果是变量赋值,则需要判断类型,不需要考虑特殊情况) int n2 = 97; //char c2 = n2; //错误: 不兼容的类型: 从int转换到char可能会有损失 } }
2.强制类型转换
自动类型转换的逆过程,将精度大的数据类型转换为精度小的数据类型。使用时要加上强制转换符(),但可能造成精度降低或溢出,要格外注意。
这里需要注意,char类型可以保存int的常量值,但不能保存int的变量值,需要强制类型转换。
public class ForceConvert{ public static void main(String[] args){ //演示强制类型转换 //需要强制类型转换,int < double int n1 = (int)1.9; System.out.println(n1); //1,造成精度损失 //需要强制类型转换,byte < int int n2 = 2000; byte b1 = (byte)n2; System.out.println(b1);//-48,造成数据溢出 //char类型可以保存int的常量值,但不能保存int的变量值,需要强转 char c1 = 97; System.out.println(c1);//'a' int n3 = 98; char c2 = (char)n3; System.out.println(c2);//'b' } }
基本数据类型和String类型的转换
在程序开发过程中,我们经常需要将基本数据类型转成String类型,或者将String类型转成基本数据类型。
1.基本数据类型转String类型
语法:将基本数据类型的值+""即可
2.String类型转基本数据类型
语法:通过基本数据类型的包装类,调用parseXX方法即可
public class StringToBasic{ public static void main(String[] args){ //1.基本数据类型 -> String类型 int n1 = 100; float f1 = 1.1F; double d1 = 4.5; boolean b1 = true; char c1 = '男'; String s1 = n1 + ""; String s2 = f1 + ""; String s3 = d1 + ""; String s4 = b1 + ""; String s5 = c1 + ""; System.out.println(s1 + " " + s2 + " " + s3 + " " + s4 + " "); //100 1.1 4.5 true //2.String类型 -> 基本数据类型 s5 = "123"; //String类型转int类型,调用Integer.parseInt(String s)方法,将字符串参数解析为带符号的十进制整数。 int n2 = Integer.parseInt(s5); //String类型转double类型,调用Double.parseDouble(String s)方法,返回一个新double初始化为指定字符串表示的值 double d2 = Double.parseDouble(s5); //String类型转float类型,调用Float.parseFloat(String s)方法,返回一个新float初始化为指定字符串表示的值 float f2 = Float.parseFloat(s5); //String类型转char类型,调用getChar(0)方法将单个字符串转换为char //String 类提供 charAt() 从输入字符串中获取第 n 个字符(从 0 开始)作为 char char c2 = s5.charAt(0); System.out.println(n2 + " " + d2 + " " + f2 + " " + c2); //123 123.0 123.0 1 } }
注意:Java 各种数据类型的初始值(默认值)
1. 整形基本数据类型 byte short int long ,默认值都为0
2. 浮点型基本数据类型 float double ,默认值为0.0
3. 字符基本数据类型 char ,默认值是 ''
4. 布尔基本数据类型 boolean ,默认值为false
5. String引用数据类型,默认值是null
也就是说在java中基本类型的默认值是0,引用类型会默认为null。