疯狂Java笔记:3.4 基本数据类型

来源:互联网 发布:华尔街英语软件课程 编辑:程序博客网 时间:2024/06/05 20:36

3.4.1 整型

byte:8 位,-128~127short:16 位,-32768~32767int:32 位,-2147483648~2147483647long:64 位。-2^63~2^63-1
  • 所有直接给出的整数值默认 int 类型。
  • 较小整数[byte/short 表数范围内]赋值给byte和short变量,系统自动当成对应类型处理
  • 巨大整数[超过int范围]赋值给long,系统不能自动当成long处理,需要加上L后缀使系统将其当成Long类型处理

  • 所有数字在计算机底层以二进制形式存在

  • 计算机以补码形式保存所有整数。补码是原码取反+1,程序中给出的二进制数均为补码形式。
  • 二进制整数最高位为符号位
  • 正数:符号位为0->补码和原码相同->可直接成换算十进制
  • 负数:符号位为1->补码[减1]->反码[按位取反]->原码->可直接换算十进制

    package jwz;/** * 整型数据类型测试 */public class IntTest{    public static void main(String[] args) {    // 巨大整数和较小整数示例       // 较小整数[byte/short范围允许]赋值给byte和short,系统自动当成对应类型处理       byte byteValue=56;       System.out.println("byte类型数:"+byteValue);// 输出56       // 大整数[超过int范围]赋值给long,系统不能自动当成long处理,需要加上L后缀       // long bigValue=999999999999;// 编译出错       long bigValue2=999999999999L;// 编译通过    // 二进制/八进制/十六进制示例:          // 二进制整数:0b或0B开头       short binValue=0B01101001;       System.out.println("二进制数:"+binValue);       // 八进制整数:0开头       int octalValue=013;       System.out.println("八进制数:"+octalValue);       // 十六进制整数:0x或0X开头[10-15用a~f表示,不区分大小写]       int hexValue=0X1f;       System.out.println("十六进制数:"+hexValue);    // 二进制原码/补码/正数/负数/溢出示例:       // 整数值默认int类型,32位,正数       // 强制转换后:byte类型,1字节,第8位成为符号位,负数,该现象称为溢出       byte binValue1=(byte)0B11010100;       // 2字节,第8位不是符号位,正数       short binValue2=0B11010100;       System.out.println("二进制数:"+binValue1+"\t"+binValue2);       // 4字节,32位为符号位,负数       int binValue3=0B10000000000000000000000000000011;       // 添加"L"后缀,当成long类型处理,8字节,32位不为符号位,正数       long binValue4=0B10000000000000000000000000000011L;       System.out.println("二进制数:"+binValue3+"\t"+binValue4);     }}

3.4.2 字符型

  • 定义:表示单个字符,必须用单引号括起来'a'
  • 字符集:所有字符的编号组成的总和
    1. ASCII字符集[8位,支持256个字符编号]
    2. Unicode字符集[16位,支持65536个字符编号],java支持
  • 字符型值表示形式:

    1. 直接通过单个字符指定字符型值:’A’,’9’
    2. 通过转义字符表示特殊字符型值:’\n’ ‘\t’ ‘\b’ ‘\r’ ‘\’ ‘\” ‘\”’
    3. 直接使用Unicode值表示:’\ uXXXX’,xxxx代表十六进制整数

      Java常用转义字符

  • 计算机保存字符时,实际上是保存该字符在字符集中对应的编号,因此char类型的值可以直接作为16位无符号整数使用,2字节,表数范围0~65535

    /** * 字符型测试 */public class CharTest{    public static void main(String[] args) {        char aChar='A';// 单个字符        char enterChar='\r';// 转义字符        char enterChar1='\n';// 转义字符        char ch='\u9999';// Unicode编码值        char chi='香';// 单个中文字符        int chiValue=chi;// 当作无符号整数使用        char c=97;// 使用无符号整数赋值,系统会自动将int整数当成char类型处理        char hexValue=0x9999;// 16进制的9999 == '香' 的Unicode编码值,输出 '香'        System.out.println(aChar+"\t"+enterChar+"\t"+enterChar1+"\t"+ch+"\t"+chi+"\t"+chiValue+"\t"+c+"\t"+hexValue);    }}

3.4.3 浮点型

  • Java 的浮点类型有固定的表数范围和字段长度,与机器无关。
  • Java 采用二进制数据的科学计数法来表示浮点数,因此不可能精确。
    • 精确度:BigDecimal>double>float
    • float:单精度浮点数,4字节,32位,1位符号位,8位指数位,23位尾数
    • double:双精度浮点数,8字节,64位,1位符号位,11位指数位,52位尾数
  • 浮点型数据表示方法:
    • 十进制:5.12,52.0,.512 必需包含小数点,否则被当成 int
    • 科学计数法:5.12e2–>5.12*10^2 [只有浮点数可以使用科学计数法形式表示]
  • Java 浮点数默认 double 类型,需要加f后缀,才会被当成 float 类型处理[类比long型整数]
  • ±无穷大和非数:用以表示溢出和出错。
    • ±浮点数/0 得到±无穷大:用Double或float类的POSITIVE_INFINITY/NEGATIVE_INFINITY表示
    • 0.0/0.0 或 对一个负数开方 或 0、0.0对任何非0数求余 得到非数 NAN
    • 只有浮点数才可以/0[自动转换成/0.0,否则/0 异常]
    • 所有无穷大数值都是相等的,而非数不与任何数值相等,甚至其本身
/** * 浮点型数据 */public class FloatTest{    public static void main(String[] args) {    // 默认为double类型        double a=5.6;        System.out.println("double类型:"+a);    // 编译出错,Java默认浮点类型为double,表示float需要加f后缀或强制类型转换    // float a=5.6;        float ff=(float)5.6;//默认double,强制转换成float        float af=5.6f;// 添加后缀表示其为float类型        System.out.println("float类型:"+af+"\t");    // ±无穷大示例:        double c=Double.NEGATIVE_INFINITY;//double类型负无穷大        float d=Float.NEGATIVE_INFINITY;//float类型负无穷大        a=0.0;        System.out.println("负无穷大:"+(-8/a));//负数除以0.0得到负无穷大        System.out.println("正无穷大:"+(8/a));//正数除以0.0得到正无穷大        System.out.println("负无穷大比较:"+(-6.0/0 == -555.0/0)+"\t"+(c==d));//负无穷大相等        double c1=Double.POSITIVE_INFINITY;//double类型正无穷大        float d1=Float.POSITIVE_INFINITY;//float类型正无穷大        System.out.println("正无穷大比较:"+(6.0/0==c1)+"\t"+(c1==d1));//正无穷大相等    // 非数NaN示例:         System.out.println("非数:"+(a/a));//0.0除以0.0或对一个负数开方得到非数        System.out.println("非数比较"+(a/a==Float.NaN));//非数不相等    // by /zero 异常        // System.out.println(8/0);//算术异常    }}

3.4.4 数值中使用下划线分隔

/** * 数值中可以自由的使用下划线分隔 */public class UnderLineTest{    public static void main(String[] args) {        int binValue=0B1000_0000_0000_0000_0000_0000_0000_0011;        double pi=3.14_15_92_65_36;        System.out.println(binValue);        System.out.println(pi);        double height=8_8_4_8.23;        System.out.println(height);        int s=8_8;        System.out.println(s);    }}

3.4.5 布尔型

  • 1字节,8位,true/false ,不能用0/1表示
  • boolean类型的值实际上只需要1位即可保存,但大部分计算机分配内存的最小单位是字节,8位
  • 其他基本数据类型不能转换成boolean类型
  • boolean类型和其他字符串连接时自动转换成字符串
  • boolean类型的值或变量主要用于流程控制:if/while/do while/for/? :
/** * 布尔型测试 */public class BooleanTest{    public static void main(String[] args) {        boolean b1=true;        boolean b2=false;        //boolean类型和其他字符串连接时自动转换成字符串        String str=b1+"_str";        System.out.println(b1+"\t"+b2+"\t"+str+"\t"+(b1==true)+"\t"+(b1==b2));    }}
0 0
原创粉丝点击