简谈JAVA基础--基本数据类型和封装类型

本文详细介绍了Java中的基本数据类型及其对应的封装类,探讨了不同类型所占用的字节数及表示范围,并讲解了如何进行类型转换及比较大小的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

java基本数据类型根据字节占用顺序包括boolean,byte,char,short,int,float,long,double

 

计算机中一个字节代表8位。根据各个类型所占用字节数可以得到表示的范围为 -2^位数   ——  2^位数-1次幂 - 1

 

除char与boolean外,其余类型的封装类继承于Number类 。java.lang -> java.lang.Number -> java.lang.XXX

 

除char的封装类外,其余封装类可以通过传递字符串来进行实例。boolean类型传入字符串如果为非true,则全部为false。

 

并且在通过传入字符串进行实例化时,如果无法被封装类所解析则会抛出NumberFormatException异常,

 

在实际使用浮点数时,为了数据更加精确,一般使用BigDecimal类型。

 

类型的转换:

(1).parseXXX()    返回值为基本数据类型

(2).valueOf()    返回值为封装数据类型 

(3)强制转换   一般不建议使用

String a = "123";

System.out.println(Integer.parseInt(a)); int 123

System.out.println(Integer.valueOf(a)); Integer 123

System.out.println((long) 1.5); long 1

在进行类型转换时,低位数可以转为高位,但是不可以将位数高的转为低的。

例如:Interger.ValueOf( Long )是不允许的。因为所表示数值的范围不同。但是可以进行Long.ValueOf( Integer),

 

比较大小的方法:

每个基本类型都对应一个封装类,区别在于,基本类型存储在栈中,而封装类型为一个对象,存储在堆中。

基本类型的比较可以通过 == 进行比较,而封装类型的比较则需要通过其他方法。

==方法比较的是两个值的内存地址,而当创建了两个封装类型对象时,两个对象值相同而地址不同,所以返回false;

 

(1).equals()方法,其实底层都是通过基本的方式进行比较,Integer用IntValue(),Double用doubleToLongBits(),注意要同类型之间比较

(2)compareTo()方法,返回值前值大于后值返回1,小于返回-1,相等返回0

Integer a = new Integer(1);

Integer b = new Integer(1);

System.out.println(a == b);     false

System.out.println(a.equals(b));    true

System.out.println(a.compareTo(b));    0

不常用方法:

​​​​​​​/**

* java基本数据类型以及封装类所包含的方法.

* <p>

* Created by yukaiji on 2017/2/26.

*/

public class BasicType {

    

    /**

     * 基本数据类型的字节数.

     */

    public static void sysoutSize() {

        System.out.println("Byte:" + Byte.SIZE / 8); // 2^7-1

        System.out.println("Character:" + Character.SIZE / 8);

        System.out.println("short:" + Short.SIZE / 8); // 2^15-1

        System.out.println("Integer:" + Integer.SIZE / 8); // 2^31-1

        System.out.println("float:" + Float.SIZE / 8);

        System.out.println("Long:" + Long.SIZE / 8); // 2^63-1

        System.out.println("Double:" + Double.SIZE / 8);

        System.out.println("Boolean:" + Boolean.FALSE);

    }





    public static void lang() {

        // 除boolean和char其余基本类型的封装类继承于Number类

        // java.lang -> java.lang.Number -> java.lang.XXX

        // 除Character类外,其他包装类可将一个字符串作为参数构造它们的实例

        // boolean类型传入字符串为非true,全部为false。

        // 传入的字符串必须能够被引用类型解析,否则会报NumberFormatException

        // Long型转Int型如果数据过大,溢出从负数开始往回减

        Integer integer = new Integer("123");

        Boolean boo = new Boolean("true");

        Long aLong = 1L;

        System.out.println(integer);

        System.out.println(boo);

    }





    public static void equles() {

        // Character类型不能直接new一个ASCII码值。

        // 基本类型的封装类,hascode是该值在机器中的ASCII码值。具有唯一性

        // bitCount 用于返回二进制有多少个1

        // getInteger(java.lang.String) 返回系统属性为String的Integer值

        // highestOneBit( i ) 讲i最高位保留,其余位数补0

        // lowestOneBit( i ) 讲i最低位保留,其余位数补0

        // numberOfLeadingZeros( i ) 二进制最高为1的位左侧为零的数量

        // numberOfTrailingZeros( i ) 二进制最低为1的位右侧为零的数量

        // reverseBytes - reverse 暂时不懂,暂时认为是反码

        // lowestOneBit 用于判断数值正负,1 和 -1 来表示

        // rotateRight 用于判断数值正负,1 和 -1 来表示

        // rotateLeft 和 rotateRight 代表循环左移和右移 << >>

        // toBinaryString 、toHexString、toOctalString 将十进制数转换为 2 、16 、8 进制

        Character car = new Character('a');

        Integer in = new Integer(7);

        Integer in1 = new Integer(4);

        System.out.println(Integer.bitCount(7));

        System.out.println(Integer.highestOneBit(7));

        System.out.println(Integer.lowestOneBit(7));

        System.out.println(Integer.toBinaryString(7));

    }





    public static void calculation() {

        // >> 为有符号右移,起始位为0代表正数,右移位数直接舍弃,为1代表负数,右移位置补到最左侧

        // >>> 为无符号右移,无论正负,高位用0补位

        System.out.println(2 << 3); // 2的二进制为10 左移三位为 10 000 为16

        System.out.println(16 >> 3); // 16的二进制为10000 右移三位 10 为2

    }

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值