Java第二天

Java第二天

关于byte、short、int、long的区别

  1. byte n1 = 3;在内存中的表示:0000 0011
  2. short n2 = 3;在内存中的表示:0000 0000 0000 0011
  3. int n3 = 3;在内存中的表示:0000 0000 0000 0000 0000 0000 0000 0011
  4. long n4 = 3;在内存中的表示0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0011

整数类型使用细节

  1. Java各整数类型有固定的范围和字段长度,不受具体的OS(操作系统)的影响,以保证Java程序的可移植性
  2. Java的整型常量(具体值)默认为int型,声明long型常量后需加l或者L
  3. Java程序中变量经常声明为int型,除非不足以表示大数,才使用long
  4. bit:计算机中的最小存储单位。byte:计算机中基本储存单元,1byte = 8bit
  5. byte占用存储空间为1个字节,short为2个字节,int为4个字节,long为8个字节

浮点类型

类型 占用存储空间 范围
单精度float 4字节 -3.403E38~3.403E38
双精度double 8字节 -1.798E308~1.798E308

PS:

  1. 关于浮点数在机器中存放形式的简单说明,浮点数=符号位+指数位+尾数位
  2. 尾数部分可能丢失,造成精度损失(小数都是近似值)

浮点数类型使用细节

  1. Java各整数类型有固定的范围和字段长度,不受具体的OS(操作系统)的影响,以保证Java程序的可移植性

  2. Java的整型常量(具体值)默认为double型,声明float型常量后需加f或者F

    public class floatdetail{
    	public static void main(String[] args){
    		//float num1 = 1.1;//错误
    		float num2 = 1.1F;//正确
    		double num3 = 1.1;//正确
    		double num4 = 1.1f;//正确
    	}
    }
    
  3. 浮点数常量有两种表达形式
    (1)十进制形式:如5.12 512.0f .512
    (2)科学计数法形式:如5.12e2 [5.12*10^2] 5.12E-2 [5.12/(10^2)]

  4. 通常情况下,应该使用double型,因为它比float型更精确

  5. 比较2.7与8.1/3

    double num5 = 2.7;
    double num6 = 8.1/3;
    System.out.println(num5);//2.7		System.out.println(num6);//2.6999999999999997
    
    if(Math.abs(num5 - num6) < 0.000001){
    			System.out.println("2.7和8.1/3相等");
    		}
    

字符类型使用细节

  1. 字符常量是用单引号(’ ')括起来的单个字符

  2. Java中还允许使用转义字符**’\‘**来将其后的字符转变为特殊字符型常量。例如:char c3 = ‘\n’ ;

  3. 在java中,char的本质是一个整数,在输出时,时Unicode码对应的字符

  4. 可以字节给char赋一个整数,然后输出时,会对照相应的unicode字符输出[97 >> a]

  5. char类型时可以进行运算的,相当于一个整数,因为它都有对应的Unicode码

    public class chardetail{
    	public static void main(String[] args){
    		int n1 = 'a' + 'b';
    		char char1 = 'a' + 2;
            
            System.out.println(n1);//195
    		System.out.println(char1);//c
            
    		char c1 = 'a';
    		char c2 = '\t';
    		char c3 = '黄';
    		char c4 = 97;
    
    		System.out.println((int)c1);//97
    		System.out.println((int)c2);//9
    		System.out.println((int)c3);//40644
    		System.out.println(c4);//a
    	}
    }
    

布尔值类型

不可以用0或者非0的整数替代false和true这点和c语言不同,在java中只能用false和true来对条件进行判断如if、while、for等等


基本数据类型转换

自动类型转换

当java程序在进行赋值或者运算时,精度小的类型自动转换为精度大的数据类型

数据类型按精度(容量)大小排序

char >> int >> long >> float >> double
byte >> short >> int >> long >> float >> double

int a = 'c';//正确
double d = 80;//正确
System.out.println(a);//99
System.out.println(d);//80.0

自动类型转换细节

  1. 有多种类型的数据混合运算时,系统会自动将所有数据转换成容量最大的那种数据类型,然后再进行计算

    int n1 = 10;//ok
    //float d1 = n1 + 1.1;//错误 n1 + 1.1 的结果类型时double
    //double dl = n1 + 1.1;//正确
    float d1 = n1 + 1.1F;//正确 n1 + 1.1 的结果类型时float
    
  2. 当我们把精度(容量)大的数据类型赋值给精度(容量)小的数据类型时,就会报错,反之就会进行自动类型转换

  3. (byte,short)和char之间不会相互自动转换

  4. byte,short,char 他们三者可以计算,再计算时首先转换为int类型

    byte b2 = 1;
    byte b3 = 2;
    short s1 = 1;
    // short s2 = b2 + s1;//错误
    int s2 = b2 + s1;//正确
    //byte b4 = b2 + b3;//错误
    
  5. boolean不参与转换

  6. 自动提升原则:表达式结果的类型自动提升为操作数中最大的类型

    byte b4 = 1;
    short s3 = 100;
    int num200 = 1;
    double num300 = 1.1;
    //float num500 = b4 + s3 + num200 + num300;//错误,计算结果为double类型
    double num500 = b4 + s3 + num200 + num300;//正确
    

强制类型转换

自动类型转换的逆过程,将容量大的数据类型转换为容量小的数据类型。使用时要加上强制转换符( ),但可能造成精度降低或溢出

public class forceconvert{
	public static void main(String[] args){
		int n1 = (int)1.9;
		System.out.println("n1 = "+ n1);//n1 = 1

		int n2 = 2000;
		byte b1 = (byte)n2;
		System.out.println("b1 = "+ b1);b1 = -48
	}
}

强制类型转换细节

  1. 当进行数据类型的大小从大到小,就需要使用强制转换

  2. 强转符号只针对于最近的操作数有效,往往会使用小括号提升优先级

    public class forceconvertdetail{
    	public static void main(String[] args){
    
    		//int x = (int)10*3.5 + 6*1.5;//错误double >> int
    		int x = (int)(10*3.5 + 6*1.5);//正确
    		System.out.println(x);//44
    	}	
    }
    
  3. char类型可以保存int的常量值,但不难保存int的变量值,需要强转

    char c1 = 100;//ok 
    int m = 100;//ok
    //char c2 = m;//错误
    char c3 = (char)m;//ok
    System.out.println(c3);//d
    
  4. byte和short类型在进行运算时,当做int类型处理


基本数据类型和String类型的转换

在程序开发中,我们经常需要将基本数据类型转成String类型。或者将String类型转成基本数据类型。

基本类型转String类型

语法:将基本类型的值+""即可

public class stringtobasic{
	
	public static void main(String[] args){

		int n1 = 100;
		float f1 = 1.1F;
		double d1 = 4.5;
		boolean b1 = true;
		String s1 = n1 + "";
		String s2 = f1 + "";
		String s3 = d1 + "";
		String s4 = b1 + "";
		System.out.println(s1 + " " + s2 + " " + s3 + " " + s4);

	}
}

String类型转基本数据类型

语法:通过基本类型的包装类调用parseXX方法即可

String s5 = "123";
//解读 使用 基本数据类型对应的包装类,的对应方法,得到基本数据类型
int num1 = Integer.parseInt(s5);
double num2 = Double.parseDouble(s5);
float num3 = Float.parseFloat(s5);
long num4 = Long.parseLong(s5);
byte num5 = Byte.parseByte(s5);
boolean b = Boolean.parseBoolean("true");
short num6 = Short.parseShort(s5);

		System.out.println("======================");
System.out.println(num1);//123
System.out.println(num2);//123.0
System.out.println(num3);//123.0
System.out.println(num4);//123
System.out.println(num5);//123
System.out.println(num6);//123
System.out.println(b);//true
System.out.println(s5.charAt(0));//1
System.out.println(s5.charAt(1));//2
System.out.println(s5.charAt(2));//3

注意事项

  1. 在将String类型转成基本数据类型时,要确保String类型能够转成有效的数据,比如我们可以把"123",转成一个整数,但是不能把"hello"转成一个整数
  2. 如果格式不正确,就会抛出异常,程序就会终止
上一篇:java流程控制;


下一篇:ABA问题