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

3.4.1 整型

byte:8 位,-128~127
short:16 位,-32768~32767
int:32 位,-2147483648~2147483647
long: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));
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值