• Java数据类型基础


    Java数据类型

    • 基本数据类型(8种)
      • 数字类型
        • 整数型:byte,short,int,long
        • 浮点型:float,double
      • 字符类型:char
      • 布尔类型:boolean
    • 对象类型(引用类型)
    数据类型名称 二进制位数(字节数) 缺省值 封装容器
    byte 8(1byte) 0 Byte
    short 16(2bytes) 0 Short
    int 32(4bytes) 0 Int
    long 64(8bytes) 0L Long
    float 32(4bytes) 0.0f Float
    double 64(8bytes) 0.0 Double
    char 16(2bytes) u0000(空格) Character
    boolean 1 false Boolean
    • byte数据类型是有符号的,以二进制补码表示的整数,最小值是-128(-27,最大值是127(27-1)
    • short数据类型是有符号的,以二进制补码表示的整数,最小值是-32728(-215,最大值是32767(215-1)
    • int数据类型是有符号的,以二进制补码表示的整数,最小值是2,147,483,648(-231,最大值是2,147,483,647(231 - 1),一般地整型常量默认为int类型
    • long数据类型是有符号的,以二进制补码表示的整数,最小值是-9,223,372,036,854,775,808(-263,最大值是9,223,372,036,854,775,807(263 -1)
    • float数据类型是单精度、32位、符合IEEE 754标准的浮点数,float在储存大型浮点数组的时候可节省内存空间,最小值是1.4E-45,最大值是3.4028235E38
    • double数据类型是双精度、64位、符合IEEE 754标准的浮点数,浮点数的默认类型为double类型,最小值是4.9E-324,最大值是1.7976931348623157E308
    • char数据类型最小值是'u0000'(即为0),最大值是'uffff'(即为65,535),char数据类型可以储存任何字符。
    • boolean数据类型存储布尔值,只有ture和false两个取值

    实际上,JAVA中还存在另外一种基本类型void,它也有对应的包装类 java.lang.Void,不过我们无法直接对它们进行操作。

    
    
    public class Demo {
    	public static void main(String[] args) {
    		// byte
    		System.out.println("基本类型:byte 二进制位数:" + Byte.SIZE);
    		System.out.println("包装类:java.lang.Byte");
    		System.out.println("最小值:Byte.MIN_VALUE=" + Byte.MIN_VALUE);
    		System.out.println("最大值:Byte.MAX_VALUE=" + Byte.MAX_VALUE);
    		System.out.println();
    		// short
    		System.out.println("基本类型:short 二进制位数:" + Short.SIZE);
    		System.out.println("包装类:java.lang.Short");
    		System.out.println("最小值:Short.MIN_VALUE=" + Short.MIN_VALUE);
    		System.out.println("最大值:Short.MAX_VALUE=" + Short.MAX_VALUE);
    		System.out.println();
    
    		// int
    		System.out.println("基本类型:int 二进制位数:" + Integer.SIZE);
    		System.out.println("包装类:java.lang.Integer");
    		System.out.println("最小值:Integer.MIN_VALUE=" + Integer.MIN_VALUE);
    		System.out.println("最大值:Integer.MAX_VALUE=" + Integer.MAX_VALUE);
    		System.out.println();
    
    		// long
    		System.out.println("基本类型:long 二进制位数:" + Long.SIZE);
    		System.out.println("包装类:java.lang.Long");
    		System.out.println("最小值:Long.MIN_VALUE=" + Long.MIN_VALUE);
    		System.out.println("最大值:Long.MAX_VALUE=" + Long.MAX_VALUE);
    		System.out.println();
    
    		// float
    		System.out.println("基本类型:float 二进制位数:" + Float.SIZE);
    		System.out.println("包装类:java.lang.Float");
    		System.out.println("最小值:Float.MIN_VALUE=" + Float.MIN_VALUE);
    		System.out.println("最大值:Float.MAX_VALUE=" + Float.MAX_VALUE);
    		System.out.println();
    
    		// double
    		System.out.println("基本类型:double 二进制位数:" + Double.SIZE);
    		System.out.println("包装类:java.lang.Double");
    		System.out.println("最小值:Double.MIN_VALUE=" + Double.MIN_VALUE);
    		System.out.println("最大值:Double.MAX_VALUE=" + Double.MAX_VALUE);
    		System.out.println();
    
    		// char
    		System.out.println("基本类型:char 二进制位数:" + Character.SIZE);
    		System.out.println("包装类:java.lang.Character");
    		// 以数值形式而不是字符形式将Character.MIN_VALUE输出到控制台
    		System.out.println("最小值:Character.MIN_VALUE=" + (int) Character.MIN_VALUE);
    		// 以数值形式而不是字符形式将Character.MAX_VALUE输出到控制台
    		System.out.println("最大值:Character.MAX_VALUE=" + (int) Character.MAX_VALUE);
    	}
    }
    
    基本类型:byte 二进制位数:8
    包装类:java.lang.Byte
    最小值:Byte.MIN_VALUE=-128
    最大值:Byte.MAX_VALUE=127
    
    基本类型:short 二进制位数:16
    包装类:java.lang.Short
    最小值:Short.MIN_VALUE=-32768
    最大值:Short.MAX_VALUE=32767
    
    基本类型:int 二进制位数:32
    包装类:java.lang.Integer
    最小值:Integer.MIN_VALUE=-2147483648
    最大值:Integer.MAX_VALUE=2147483647
    
    基本类型:long 二进制位数:64
    包装类:java.lang.Long
    最小值:Long.MIN_VALUE=-9223372036854775808
    最大值:Long.MAX_VALUE=9223372036854775807
    
    基本类型:float 二进制位数:32
    包装类:java.lang.Float
    最小值:Float.MIN_VALUE=1.4E-45
    最大值:Float.MAX_VALUE=3.4028235E38
    
    基本类型:double 二进制位数:64
    包装类:java.lang.Double
    最小值:Double.MIN_VALUE=4.9E-324
    最大值:Double.MAX_VALUE=1.7976931348623157E308
    
    基本类型:char 二进制位数:16
    包装类:java.lang.Character
    最小值:Character.MIN_VALUE=0
    最大值:Character.MAX_VALUE=65535
    
    

    Java缺省值

    • 对象数据类型缺省值为null
    1. 但是如果在main方法中只声明变量但未初始化会提示错误未初始化变量
    public class Demo {
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		int a;
    		double b;
    		System.out.println(a);
    		System.out.println(b);
    	}
    }
    
    
    Exception in thread "main" java.lang.Error: Unresolved compilation problems: 
    	The local variable a may not have been initialized
    	The local variable b may not have been initialized
    
    	at Demo.main(Demo.java:8)
    
    1. 如果变量是类成员则不会报错
    
    public class Demo {
    
    	private byte a;
    	private short b;
    	private int c;
    	private float d;
    	private double e;
    	private boolean f;
    	private char g;
    	private int[] h; 
    	
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		Demo demo = new Demo();
    		System.out.println(demo.a);
    		System.out.println(demo.b);
    		System.out.println(demo.c);
    		System.out.println(demo.d);
    		System.out.println(demo.e);
    		System.out.println(demo.f);
    		System.out.println(demo.g);
    		System.out.println(demo.h);
    	}
    }
    
    0
    0
    0
    0.0
    0.0
    false
     
    null
    
    1. 特别的,如果是static类型的变量,也可以不创建对象直接使用
    public class Demo {
    
    	private static int a;
    	
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		System.out.println(a);
    	}
    }
    
    0
    

    Java中的常量

    根据数是否会变化分为变量和常量,用final定义的变量是常量

    • byte、int、long、和short都可以用十进制、十六进制、八进制以及二进制的方式来表示。以十六进制表示时,需以0x或0X开头,如0xff,0X9A。八进制必须以0开头,如0123,034,二进制必须以0b或0B开头
    public class Demo {
    	public static void main(String[] args) {
    		byte a = 0B0101011;//二进制表示,只能由0和1构成
    		short b = 014;//八进制表示,由0~7构成
    		int c = 65;//十进制表示,由0~9构成
    		long d = 0xc5;//十六进制表示,由0~9,a,b,c,d,e构成
    		System.out.println(a);
    		System.out.println(b);
    		System.out.println(c);
    		System.out.println(d);
    	}
    }
    
    43
    12
    65
    197
    
    • 长整型:长整型常量必须以L/l作结尾,如9L,342L。
    • 浮点型常量:由于小数常量的默认类型是double型,所以float类型的常量后面一定要加f/F。同样带小数的变量默认为double类型。
    • 布尔常量
    • 字符常量:字符型常量需用两个单引号括起来。Java中的字符占两个字节。
    • 字符串常量:字符串常量需用两个双引号括起来。
    • null常量:只有一个取值null
    • 字符串常量和字符常量都可以包含任何Unicode字符,如:
    public class Demo {
    	public static void main(String[] args) {
    		char a = 'u0061';
    		String b = "u0062";
    		System.out.println(a);
    		System.out.println(b);
    	}
    }
    
    a
    b
    

    Java类型转换

    • “小”转“大”,自动转换;“大”转“小”,需强制类型转换
    • (byte,char,short)--int--long--float—double
    • 可以直接将整数值赋给char类型的变量,可以是二进制/八进制/十进制/十六进制
    • 如果低级类型为char型,向高级类型(整型)转换时,会转换为对应ASCII码值
      网上找的一幅图片很好,不过有一点点小错误,原图将byte转换为char时未做转换:
      图片不见啦!
      补充一幅图,红色箭头表示需做强制类型转换,蓝色不需要

    float a = 1.2;//报错,double转换为int未做强制类型转换
    float b = 1.2f;//不报错
    float c = (float)1.2;//不报错
    int d = 100l;//报错,long转换为int未做强制类型转换
    

    byte和char类型相互转换

    1.byte类型变量和char类型变量相互转换时需要强制类型转换

    byte a = 1;
    char b = (char)a;
    char c = 'a';
    byte d = (byte)c;
    

    2.char类型常量转换为short类型变量/short类型常量转换为char类型变量时可直接转换,当然不能超过其范围

    //char类型常量转换为short类型变量
    byte a = 'a';//不报错
    byte b = 'u00ee';//报错,超出byte范围
    
    //short类型常量转换为char类型变量
    final byte a = 1;
    char b = a;
    

    short类型和char类型相互转换

    1. short类型变量和char类型变量相互转换时都需要强制类型转换
    char a = 'a';
    short b = (short)a;
    short c = 1;
    char b = (char)c;
    
    1. char类型常量转换为short类型变量/short类型常量转换为char类型变量时可直接转换,当然不能超过其范围
    //char类型常量转换为short类型变量
    short a = 'a';//不报错
    short b = 'ueeee';//报错,超出short范围
    
    //short类型常量转换为char类型变量
    final short a =32000;
    char b = a;
    

    常量优化机制

    • 虽说整型常量的默认类型是int,但是还是会有特殊情况,整型常量可直接赋值给byte,short,char而不需做强制类型转换,这是因为Java的常量优化机制
    byte a = 100;//不报错
    
    int a = 100;
    byte b = a;//报错
    
    int a = 100;
    byte b = (byte)a;//需强制类型转换
    
    byte a = 130;//如果超出范围了也会报错
    byte b = (byte)130;//强制转换后不报错
    
    int x = 3;
    int y = 4;
    byte a = 3+4;//不报错!!!!
    byte b = 100+100;//报错!!!!
    byte c= x+y;//报错!!!!
    

    表达式的数据类型自动提升

    关于类型的自动提升,注意下面的规则。

    • 所有的byte,short,char型的值将被提升为int型;
    • 如果有一个操作数是long型,计算结果是long型;
    • 如果有一个操作数是float型,计算结果是float型;
    • 如果有一个操作数是double型,计算结果是double型;

    包装类过渡类型转换

    一般情况下,我们首先声明一个变量,然后生成一个对应的包装类,就可以利用包装类的各种方法进行类型转换了。简单类型的变量转换为相应的包装类,可以利用包装类的构造函数。而在各个包装类中,总有形为××Value()的方法,来得到其对应的简单类型数据。利用这种方法,也可以实现不同数值型变量间的转换
    例如:

    float f1=100.00f;
    Float F1=new Float(f1);
    double d1=F1.doubleValue();//F1.doubleValue()为Float类的返回double值型的方法
    		
    double d2=100.00;
    Double D2=new Double(d2);
    int i1=D2.intValue();
    

    字符串与其他类型的转换

    1. 其它类型向字符串的转换
    • 调用类的toString转换方法:X.toString();
    • 自动转换:X+"";
    • 使用String的方法:String.valueOf(X);
    1. 字符串转换为其他类型
    • 静态parseXXX方法
    • 调用X.valueOf()方法
    天将降大任于是人也,必先苦其心志,劳其筋骨,饿其体肤,空乏其身,行拂乱其所为,所以动心忍性,曾益其所不能。
  • 相关阅读:
    ThinkPHP中的__URL__或__URL__等
    如何输出其他模块的操作模板
    如何改变ThinkPHP默认访问模块
    C#中文件操作
    常见的网页技巧(转)
    JS实现验证码局部更新
    winform控件随窗体大小变化而变化
    php 观察者模式
    PHP生命周期
    Mac 安装redis
  • 原文地址:https://www.cnblogs.com/chap-xw/p/13860585.html
Copyright © 2020-2023  润新知