java基础复习(5)
2014-08-18 12:36
148 查看
本文资料http://blog.csdn.net/mazhimazh/article/category/1907605
我们知道Java中数据类型分为引用类型以及基本数据类型,其结构如下图所示
![](http://img.blog.csdn.net/20140818125032015?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvQUE0Mjc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
1)基本数据类型
java中基本数据类型分为四类八种,其大小在java中都是固定的
![](http://img.blog.csdn.net/20140818125529430?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvQUE0Mjc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
1.1)boolean与Boolean
1.1.1)boolean
boolean所表示出来的信息是1bit,但是字节是计算机里最小的可寻址单元,那我们的boolean如果是1/8 byte的话则jvm必定要对boolean进行特殊的处理(指令),但查阅资料得知java并没有对boolean类型进行特殊的处理,那么现在出现了一个问题,java中boolean类型如果是在java中分配的内存是1位的话,那么
它又是如何处理的呢?
翻阅sum对于boolean类型的描述
![](http://img.blog.csdn.net/20140818191307658?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvQUE0Mjc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
从描述信息来看,boolean表现出来的信息是1位的信息,但是实际大小并没有明确定义,看到这里就感觉很奇怪了,那boolean类型的在java中到底分配了多大的大小呢?为此,翻阅了google和百度,原来关于这个问题讨论的专题真不少
http://www.importnew.com/1305.html
http://blog.csdn.net/ithomer/article/details/7310008
http://bbs.csdn.net/topics/190122943
http://hi.baidu.com/nwsuafers/item/5c3939481aeea4066dc2f01b
看了这么些资料,在http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-2.html#jvms-2.3.4的2.3.4节关于boolean类型的介绍有这么段话
![](http://img.blog.csdn.net/20140818191949125?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvQUE0Mjc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
这个地方明确说出了,在虚拟机里boolean在编译时候会用int或者byte表示,false用证书0表示,而true用非零整数表示,所有单个boolean类型所分配的大小和int是一样的为4byte,但是boolean数组的时候,则每个boolean会分配一个字节大小的内存,boolean数组会被当成byte数组进行访问,所以每个boolean占1byte
Java虚拟机不提供操作boolean类型的字节码指令,程序在编译后boolean类型都转化成了int操作。但是Java虚拟机支持boolean类型的数组的访问和修改,共用byte类型数组的字节码指令。
所以综上所述,单个boolean在jvm中分配的内存和int一样4个字节,而boolean数组中每个boolean所占内存和byte一样为1byte
1.1.2)Boolean
Boolean对象作为boolean的封装对象,jvm所分配的大小在后面会统一记录,现在就看下Boolean封装的一些方法
![](http://img.blog.csdn.net/20140818194108125?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvQUE0Mjc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
这里我们看下getBoolean和parseBoolean方法,话说这两个乍一看是不是感觉一样的(这两个方法的确有点难以分辨),所以在这个地方特地记录一下,其实parseBoolean是真的从字符串转boolean,那getBoolean是干什么的?看下java的对于此方法的解释
![](http://img.blog.csdn.net/20140818194247593?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvQUE0Mjc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
翻译下来:
public static boolean getBoolean(String name)当且仅当以参数命名的系统属性存在,且等于"true" 字符串时,才返回 true。(从 JavaTM 1.0.2 平台开始,字符串的测试不再区分大小写。)通过 getProperty 方法可访问系统属性,此方法由 System 类定义。如果没有以指定名称命名的属性或者指定名称为空或 null,则返回 false。
1.2)byte和Byte
1.2.1)byte
关于byte在jvm中的存储看到这篇资料 但是目前还是不确定 只是做个记录 还得查资料进行补充
http://blog.csdn.net/nethibernate/article/details/5578911
在java中byte所占内存大小是1byte即8位
1.2.2)Byte
在我的一篇博客“一些表达式的陷阱”中的5题关于Integer的测试,那个问题是不是很奇怪,其实在Byte中也存在这样的问题,下面我们啦通过源代码来看下这个问题。
![](http://img.blog.csdn.net/20140819014802088?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvQUE0Mjc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
这个cache在什么时候进行初始化呢?是在ByteCache静态类加载的时候,通过运行static静态块来完成的。那么这个静态内部类到底在什么时候加载呢?肯定是在valueOf()方法中调用的时候。试想一下,如果在Byte类加载的时候就对这256个Byte数进行缓存,那么有可能会造成资源的浪费。因为程序可能根本用到不。所以如上的写法已经把缓存数组延迟到最迟加载了,也就是第一次在使用Byte数值的时候,默认都会调用valueOf() 方法,事实证明在对Byte进行Byte
a=1定义赋值的时候就会默认调用valueOf方法,具体资料参照http://blog.csdn.net/mazhimazh/article/details/17681787
1.3)char和Character
1.3.1)char
char在Java中是16位的,因为Java用的是Unicode,可以取的范围是0~65535(十六进制为0~OxFFFF),而且ASCLL码值也是存在里面的,在0-127
1.3.2)Character
Character是char的包装类
1.4)short和Short
1.4.1)short
short在java中是16位的,取值这些就可以不说了,下面来直接看个程序
![](http://img.blog.csdn.net/20140819101749875?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvQUE0Mjc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
我们看到这个地方是报错的,它的错是
![](http://img.blog.csdn.net/20140819102103157?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvQUE0Mjc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
很明显,它的错是说不能从int转为ishort,我们感觉很奇怪了 ,我压根没用int怎么会报这个错呢?原来
![](http://img.blog.csdn.net/20140819102239206?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvQUE0Mjc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
1.4.2)Short
Short作为short类型的包装类,提供的方法都差不多
1.5)int和Integer
1.4.1)int
int作为整数的基本类型,所占的内存大小为4个字节
1.4.2)Integer
Integer作为int的封装类,而int作为证书的基本类型,所以我们要求Integer的中方法是非常高的,所以在Integer中,他们使用 了大量的位运算来提高效率
http://blog.csdn.net/mazhimazh/article/details/17684701
1.6)String
java中字符串使用的非常频繁,说到String,下面的这个资料不错
http://sarin.iteye.com/blog/603684/
我们知道Java中数据类型分为引用类型以及基本数据类型,其结构如下图所示
1)基本数据类型
java中基本数据类型分为四类八种,其大小在java中都是固定的
1.1)boolean与Boolean
1.1.1)boolean
boolean所表示出来的信息是1bit,但是字节是计算机里最小的可寻址单元,那我们的boolean如果是1/8 byte的话则jvm必定要对boolean进行特殊的处理(指令),但查阅资料得知java并没有对boolean类型进行特殊的处理,那么现在出现了一个问题,java中boolean类型如果是在java中分配的内存是1位的话,那么
它又是如何处理的呢?
翻阅sum对于boolean类型的描述
从描述信息来看,boolean表现出来的信息是1位的信息,但是实际大小并没有明确定义,看到这里就感觉很奇怪了,那boolean类型的在java中到底分配了多大的大小呢?为此,翻阅了google和百度,原来关于这个问题讨论的专题真不少
http://www.importnew.com/1305.html
http://blog.csdn.net/ithomer/article/details/7310008
http://bbs.csdn.net/topics/190122943
http://hi.baidu.com/nwsuafers/item/5c3939481aeea4066dc2f01b
看了这么些资料,在http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-2.html#jvms-2.3.4的2.3.4节关于boolean类型的介绍有这么段话
这个地方明确说出了,在虚拟机里boolean在编译时候会用int或者byte表示,false用证书0表示,而true用非零整数表示,所有单个boolean类型所分配的大小和int是一样的为4byte,但是boolean数组的时候,则每个boolean会分配一个字节大小的内存,boolean数组会被当成byte数组进行访问,所以每个boolean占1byte
Java虚拟机不提供操作boolean类型的字节码指令,程序在编译后boolean类型都转化成了int操作。但是Java虚拟机支持boolean类型的数组的访问和修改,共用byte类型数组的字节码指令。
所以综上所述,单个boolean在jvm中分配的内存和int一样4个字节,而boolean数组中每个boolean所占内存和byte一样为1byte
1.1.2)Boolean
Boolean对象作为boolean的封装对象,jvm所分配的大小在后面会统一记录,现在就看下Boolean封装的一些方法
这里我们看下getBoolean和parseBoolean方法,话说这两个乍一看是不是感觉一样的(这两个方法的确有点难以分辨),所以在这个地方特地记录一下,其实parseBoolean是真的从字符串转boolean,那getBoolean是干什么的?看下java的对于此方法的解释
翻译下来:
public static boolean getBoolean(String name)当且仅当以参数命名的系统属性存在,且等于"true" 字符串时,才返回 true。(从 JavaTM 1.0.2 平台开始,字符串的测试不再区分大小写。)通过 getProperty 方法可访问系统属性,此方法由 System 类定义。如果没有以指定名称命名的属性或者指定名称为空或 null,则返回 false。
1.2)byte和Byte
1.2.1)byte
关于byte在jvm中的存储看到这篇资料 但是目前还是不确定 只是做个记录 还得查资料进行补充
http://blog.csdn.net/nethibernate/article/details/5578911
在java中byte所占内存大小是1byte即8位
1.2.2)Byte
在我的一篇博客“一些表达式的陷阱”中的5题关于Integer的测试,那个问题是不是很奇怪,其实在Byte中也存在这样的问题,下面我们啦通过源代码来看下这个问题。
这个cache在什么时候进行初始化呢?是在ByteCache静态类加载的时候,通过运行static静态块来完成的。那么这个静态内部类到底在什么时候加载呢?肯定是在valueOf()方法中调用的时候。试想一下,如果在Byte类加载的时候就对这256个Byte数进行缓存,那么有可能会造成资源的浪费。因为程序可能根本用到不。所以如上的写法已经把缓存数组延迟到最迟加载了,也就是第一次在使用Byte数值的时候,默认都会调用valueOf() 方法,事实证明在对Byte进行Byte
a=1定义赋值的时候就会默认调用valueOf方法,具体资料参照http://blog.csdn.net/mazhimazh/article/details/17681787
1.3)char和Character
1.3.1)char
char在Java中是16位的,因为Java用的是Unicode,可以取的范围是0~65535(十六进制为0~OxFFFF),而且ASCLL码值也是存在里面的,在0-127
1.3.2)Character
Character是char的包装类
1.4)short和Short
1.4.1)short
short在java中是16位的,取值这些就可以不说了,下面来直接看个程序
我们看到这个地方是报错的,它的错是
很明显,它的错是说不能从int转为ishort,我们感觉很奇怪了 ,我压根没用int怎么会报这个错呢?原来
1.4.2)Short
Short作为short类型的包装类,提供的方法都差不多
1.5)int和Integer
1.4.1)int
int作为整数的基本类型,所占的内存大小为4个字节
1.4.2)Integer
Integer作为int的封装类,而int作为证书的基本类型,所以我们要求Integer的中方法是非常高的,所以在Integer中,他们使用 了大量的位运算来提高效率
http://blog.csdn.net/mazhimazh/article/details/17684701
1.6)String
java中字符串使用的非常频繁,说到String,下面的这个资料不错
http://sarin.iteye.com/blog/603684/
相关文章推荐
- 基础java复习
- Java 基础复习 01
- java 基础复习资料
- Java WEB开发实战 之 第一部分:复习必备的基础知识【私塾在线原创】
- 复习java基础笔记
- 既然开始从头复习Java基础知识,好歹来本参考书吧!
- 数据结构与算法基础 复习 java
- Java复习总结:Java基础程序设计
- java 基础复习
- 复习Java基础2_2(2011 06 11)
- java 基础复习
- (JAVA基础复习) IO流
- Java基础复习——数据类型、变量和数组
- Java基础复习第一篇
- Java基础知识复习(一)
- 今天复习了一下java的基础知识。
- (马士兵)尚学堂java基础语法复习笔记1
- java基础复习1--基本数据类型、运算符号、表达式语句与程序结构
- JAVA基础复习(二)继承的一点细节:upcasting
- JAVA基础复习(三)泛型的使用