深入源码-java数据类型-8种基本数据类型
2017-10-10 00:00
169 查看
一、java基本数据类型
1、基本数据类型介绍
java基本数据类型就8种,记住就好了。除了这些都是引用型的了。,如下图(网络图片)
java四类八种基本数据类型:
第一类:整型 byte short int long
第二类:浮点型 float double
第三类:逻辑型 boolean(它只有两个值可取true false)
第四类:字符型 char
在栈中可以直接分配内存的数据是基本数据类型。
引用数据类型:是数据的引用在栈中,但是他的对象在堆中。
要想学好Java必须知道各种数据的在内存中存储位置。
对内存有了很好的了解,可以有助你分析程序。
2、基本数据类型占用空间
第一类:整型 byte short int long
byte类型占1个字节,从-128到127
short从-32768到32767
int从-2147483648,到2147483647共10位
long从-9223372036854775808到9223372036854775807共19位
扩展说明:
那么为什么byte类型中1个字节的取值的范围是-128~127呢,计算机存储是利用二进制进行编排存储的,下图是计算一个正整数122的计算二进制过程,求其原码,补码和反码
java里不能这样表示二进制,只能是 8,10,16进制
第二类:浮点型 float double
在数学中0到1有无数个浮点数;而计算机是离散的,所以表示的时候有误差,计算机用精度(小数点后几位来表示正确),比较浮点数时a==0.1是不合适的,应该a-0.1==0;如果a是0.1,则即使有误差 a-0.1==0因为a和0.1都被表示为一个有误差的计算机二进制
第三类:逻辑型 boolean(它只有两个值可取true false)
第四类:字符型 char
三、基本类型对应包装类源码分析
1、Byte类
(1)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的属性域
(3)主要方法
(4)parseByte 与 valueOf方法的区别
2、Short类
short属性域与Btye类似的,所差别的主要是值域范围
short的主要方法也类似于btye,调用的是Integer的方法
3、由于Integer类型比较复杂,所以后续会单个提出一章来讲解
1、基本数据类型介绍
java基本数据类型就8种,记住就好了。除了这些都是引用型的了。,如下图(网络图片)
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类型占1个字节,从-128到127
short从-32768到32767
int从-2147483648,到2147483647共10位
long从-9223372036854775808到9223372036854775807共19位
扩展说明:
那么为什么byte类型中1个字节的取值的范围是-128~127呢,计算机存储是利用二进制进行编排存储的,下图是计算一个正整数122的计算二进制过程,求其原码,补码和反码
java里不能这样表示二进制,只能是 8,10,16进制
第二类:浮点型 float double
在数学中0到1有无数个浮点数;而计算机是离散的,所以表示的时候有误差,计算机用精度(小数点后几位来表示正确),比较浮点数时a==0.1是不合适的,应该a-0.1==0;如果a是0.1,则即使有误差 a-0.1==0因为a和0.1都被表示为一个有误差的计算机二进制
第三类:逻辑型 boolean(它只有两个值可取true false)
第四类:字符型 char
三、基本类型对应包装类源码分析
1、Byte类
(1)Byte中主要提供的方法有
public final class Byte extends Number implements Comparable<Byte> { 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<Byte> TYPE = (Class<Byte>) 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类型比较复杂,所以后续会单个提出一章来讲解
相关文章推荐
- 深入源码-java数据类型-8种基本数据类型二:Integer源码解析
- 磨刀不误砍材工 - Java的基础语言要素(从变量/常量切入,看8种基本数据类型)
- java中8种基本数据类型、基本数据类型的转换与运算符
- java 8种基本数据类型及封装类及默认值
- Java中8种基本数据类型的总结
- Java中8种基本数据类型及其默认值
- 深入Java基础(一)——基本数据类型及其包装类
- Java的8种基本数据类型
- java 8种基本数据类型的默认值及所占字节数
- java 8种基本数据类型
- Java中8种基本数据类型及其默认值
- java的8种基本数据类型及转换、比较
- Java 基础知识 8种基本数据类型 equal 与==区别 Switch 使用
- Java千百问_06数据结构(002)_java有哪8种基本数据类型
- Java基础--->03.Java的8种基本数据类型。
- JAVA基础之8种基本数据类型
- JAVA8种基本数据类型、初识try、catch
- java基本数据类型(8种)
- Java 4类8种基本数据类型都有相应的包装类
- Java的8种基本数据类型