java基础复习(5)

本文资料http://blog.youkuaiyun.com/mazhimazh/article/category/1907605

我们知道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.youkuaiyun.com/ithomer/article/details/7310008

                          http://bbs.youkuaiyun.com/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.youkuaiyun.com/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.youkuaiyun.com/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.youkuaiyun.com/mazhimazh/article/details/17684701

        1.6)String

                  java中字符串使用的非常频繁,说到String,下面的这个资料不错

                  http://sarin.iteye.com/blog/603684/

                

                        

                           

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值