Java 基础

一、java基本数据类型

byte char int short float long double boolean 一共八种,同时他们的内存占用情况:

一个字节等于8位;1 byte = 8 bit。

byte:1 byte 8 bit          -2^7 ——2^8-1  -128 ——127 (因为中间有个0算为正数了,)
char:2 byte 16 bit       0——2^16 - 1    0——65535   (因为字符串没有负数,所以都为正的)
short:2 byte 16 bit     -2^15 —— 2^15- 1 
int:4 byte 32 bit         -2^31 —— 2^31- 1
float:4 byte  32 bit      -2^63 —— 2^63- 1
long:8 byte 64 bit      -2^63 —— 2^63- 1
double:8 byte 64 bit   2^127 —— 2^127- 1

boolean  1 byte   true  false (注意:其实布尔类型只需要一个bit 就可以了,但是计算机最小存储单元是1 byte)

规律总结:

最小值和最大值的计算方式就是 2 的 x 平方 (x = 字节数 * 8 - 1 = 多少bit),但这个规律不包括浮点数,即float 和 double 。

 为什么内存一样大的int 和 float 所代表的大小却不一样呢?

  • 原因很简单,就是int类型是直接以二进制形式保存,而float类型是以指数形式保存。 参考

二 、String 为什么不算是基本类型?

从 String str  = new String("str"); 我们点击进去看源码发现 

    /** The value is used for character storage. */
    private final char value[];
 

   
   public String(String original) {
        this.value = original.value;
        this.hash = original.hash;
    }

String类其实是对字符数组进行了封装操作,用户真正操作的其实字符数组,居然是数组,我们知道传统的数组有一个天生的缺点:长度不可改变。我们在讲解继承的时候,我们是不是自己实现了一个Array类的操作啊,在这个类中我们是不是定义了一个addLen()的方法,这个方法主要是为了动态扩展数组长度而定义的,但是我们发现这个方法中改变的其实并不是数组长度,而是数组的引用地址。也就是说,我们改变的不是字符串的内容,而是字符串的引用地址。那原来的堆内存是不是就会成为垃圾啊?等待JVM回收。当别人问到一定要清楚这个概念哦。简单的说就是:字符串内部其实就是一个使用final关键字定义的char[]数组,数组长度一旦声明则不可改变,字符串一旦声明则不可改变,改变的引用内存指向。

String属于一个类,不属于一个关键字、准确的说它不是一个数据类型。只是由于它字符串的特殊支持,我们习惯把它叫做字符串类型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值