java怎么看不到数据类型源码_深入源码-java数据类型-8种基本数据类型

一、java基本数据类型

1、基本数据类型介绍

java基本数据类型就8种,记住就好了。除了这些都是引用型的了。,如下图(网络图片)

153c76710ced4a5b6100365d8e0a046a.png

java四类八种基本数据类型:

第一类:整型 byte short int long

第二类:浮点型 float double

第三类:逻辑型 boolean(它只有两个值可取true false)

第四类:字符型 char

在栈中可以直接分配内存的数据是基本数据类型。

引用数据类型:是数据的引用在栈中,但是他的对象在堆中。

要想学好Java必须知道各种数据的在内存中存储位置。

对内存有了很好的了解,可以有助你分析程序。

2、基本数据类型占用空间

boolean 布尔型

1或8,该类型随编译环境而定

byte 字节类型

1

char 字符型

2  一个字符能存储一个中文汉字

short 短整型

2

int 整数类型

4

float 浮点类型(单精度)

4

long 长整形

8

double 双精度类型(双精度)

8

第一类:整型 byte short int long

byte类型占1个字节,从-128到127

short从-32768到32767

int从-2147483648,到2147483647共10位

long从-9223372036854775808到9223372036854775807共19位

3fb25ed3ead43f97ff843dce7714894e.png

扩展说明:

那么为什么byte类型中1个字节的取值的范围是-128~127呢,计算机存储是利用二进制进行编排存储的,下图是计算一个正整数122的计算二进制过程,求其原码,补码和反码

19555b30bfb1667df28932c2e8aee571.png

java里不能这样表示二进制,只能是   8,10,16进制

84afc7f8211bd57d1710f46e7dcf335e.png

第二类:浮点型 float double

在数学中0到1有无数个浮点数;而计算机是离散的,所以表示的时候有误差,计算机用精度(小数点后几位来表示正确),比较浮点数时a==0.1是不合适的,应该a-0.1==0;如果a是0.1,则即使有误差 a-0.1==0因为a和0.1都被表示为一个有误差的计算机二进制

0c50875c1f450808a84cf2f1fb99efcd.png

b15636ae8f5824f7d19dab5226f7d1a9.png

第三类:逻辑型 boolean(它只有两个值可取true false)

6a8bc4dbb68b446a94b55c70180b87e4.png

第四类:字符型 char

4136bcb6e4ffa4485fb63fe035938c74.png

三、基本类型对应包装类源码分析

1、Byte类

(1)Byte中主要提供的方法有

public final class Byte extends Number implements Comparable {

Byte(byte value);构造方法

int compare 比较大小 静态工厂方法

Byte decode 解码方法,包括二进制、八进制、十六进制 静态工厂方法

int hashCode 计算hashcode码

byte parseByte 转换为Byte类型

String toString 转换成字符串

int toUnsignedInt byte转int

Byte valueOf 转换为Byte类型 静态工厂方法

boolean equals 比较byte大小

需要注意toUnsignedInt方法:

1.计算机中数据按照补码存储

2.byte是8位,int是32位,byte转换为int后是32位,如果不和0xff进行与运算,

例如:byte=-1 那么转为int的补码就是11111111 11111111 11111111 11111111,toHexString()后就是ff ff ff ff 跟原来的相比较多了三个ff。

byte为负数,高3字节就填充1,整数就补0,所以,如果byte是正数那么是否进行&0xff结果都一样;如果是负数就一定需要&0xff。

(2)Byte的属性域

//最小值

public static final byte MIN_VALUE = -128;

//最大值

public static final byte MAX_VALUE = 127;

//声明类型

//获取JVM本地类型

public static final Class TYPE = (Class) Class.getPrimitiveClass("byte");

//二进制长度

public static final int SIZE = 8;

//java8新属性,补充二进制

public static final int BYTES = SIZE / Byte.SIZE;

//byte存储

private final byte value;

//静态内部类

private static class ByteCache {

//不提供实例化方法

private ByteCache(){}

//缓存byte的所有值

//好处显而易见,使用比较多时节省内存空间

static final Byte cache[] = new Byte[-(-128) + 127 + 1];

static {

for(int i = 0; i < cache.length; i++)

cache[i] = new Byte((byte)(i - 128));

}

}

(3)主要方法

//主要调用了Integer的parseInt方法

public static byte parseByte(String s, int radix)

throws NumberFormatException {

int i = Integer.parseInt(s, radix);

if (i < MIN_VALUE || i > MAX_VALUE)

throw new NumberFormatException(

"Value out of range. Value:\"" + s + "\" Radix:" + radix);

return (byte)i;

}

//调用了Integer.decode 八进制、十六进制转换

public static Byte decode(String nm) throws NumberFormatException {

int i = Integer.decode(nm);

if (i < MIN_VALUE || i > MAX_VALUE)

throw new NumberFormatException(

"Value " + i + " out of range from input " + nm);

return valueOf((byte)i);

}

//转换其他类型,直接进行强制转换,低级变量向高级变量转换

public double doubleValue() {

return (double)value;

}

(4)parseByte 与 valueOf方法的区别

//返回值是byte,相当于在栈中划分新的内存空间

public static byte parseByte(String s, int radix)

throws NumberFormatException {

int i = Integer.parseInt(s, radix);

if (i < MIN_VALUE || i > MAX_VALUE)

throw new NumberFormatException(

"Value out of range. Value:\"" + s + "\" Radix:" + radix);

return (byte)i;

}

//静态工厂方法,返回包装类,实际存储内容已经缓存在静态内部类中

public static Byte valueOf(String s, int radix)

throws NumberFormatException {

return valueOf(parseByte(s, radix));

}

2、Short类

short属性域与Btye类似的,所差别的主要是值域范围

short的主要方法也类似于btye,调用的是Integer的方法

3、由于Integer类型比较复杂,所以后续会单个提出一章来讲解

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值