数据类型 关乎内存占用——已发《电脑报》

 

求职不怕考

pcw-chendx@vip.sina.com

与编程相关的招聘,都会准备很多考题,一不小心考生就在考题上栽了跟头,特别是没有多少工作经验的应届毕业生,往往回答得过于理论化,很难令考官满意。为此,我们特意推出本系列,通过对真实考题的分析让大家在回答考题时有更多的实用性,让考官满意,顺利找到工作。

 

数据类型  关乎内存占用

爪哇米工作室 陈跃峰

       数据类型是编程的基础,它会影响程序对内存的占用情况,如果数据类型使用的不好,会增加内存占用,反之可以减少内存占用。所以,在招聘考试中,一定会有与数据类型相关的题目。

      

招聘题目:编写一个方法,求byte类型的绝对值。

       答案A

                     public byte abs(byte b){

                            if(b >= 0){

                                   return b;

                            }else{

                                   return –b;

                            }

                     }

 

       答案B

                     public byte abs(byte b){

                            if(b >= 0){

                                   return b;

                            }else{

                                   return (byte)–b;

                            }

                     }

 

       答案C

                     public int abs(byte b){

                            if(b >= 0){

                                   return b;

                            }else{

                                   return –b;

                            }

                     }

 

       题目答案:答案是C

 

为什么答案是C

       答案A有语法错误,对于byte类型的参数b来说,表达式-bint类型,这不符合声明中返回值是byte的约定,所以答案A错了。在Java语法中,对于byteshortchar类型进行算术运算时,运算结果将自动提升为int类型,不要忽视了这点。

       答案B有逻辑错误,byte类型的数值区间是[-128,127],由于正数和负数存储格式的不同(原码和补码格式存储),所以在求绝对值时, -128byte类型数值没有对应绝对值,所以答案B错了。

       所以,通过这样一个简单的题目,考官就可以考察了应聘者对于数据类型运算时的变化的掌握情况,对应聘者基础知识的扎实程度会有一个直观的认识。

数据类型在几乎所有的实际开发中都会用到,不管是开发软件、还是开发网站程序,用好数据类型,不仅可以使开发者写出的代码比较简洁,也可以在一定程度上提高程序的执行效率,而代码的简洁和执行效率是实际开发过程中最为重要的内容之一

 

实际应用

       数据类型在实际开发中是如何运用的?如何提高执行效率?我们通过一组代码进行说明。在实际的数据存储和网络传输中,底层的数据处理很多是基于byte数组的,如果需要存储或传输一个int类型的数据,容易想到的方法是利用字符串实现来回的转换。

利用字符串转换虽然比较省事,但是无论是在内存使用还是执行效率上都无法令人满意,而int类型是由4byte组成的,利用这个知识可以轻松的实现int类型数值和byte数组之间的互转,提高效率。

代码1

int类型转换为byte数组:

int n = 12345;

        byte[] b = new byte[4];

        b[0] = (byte)n;

        b[1] = (byte)(n >> 8);

        b[2] = (byte)(n >> 16);

        b[3] = (byte)(n >> 24);

       点评:该代码结构清晰,执行效率高,在存储时将int类型的4个字节按照从低到高的顺序依次存储到byte数组b中,利用移位和byte类型的强制转换轻松实现int类型中4个字节的分割。

 

byte数组转换为int类型:

int m = (b[0] & 0xff) | ((b[1] << 8) & 0xff00) |

((b[2] << 16) & 0xff0000) |((b[3] << 24) & 0xff000000);

       点评:该代码的结构和难度比上面的转换要大一些,按照上面的存储顺序,b[0]存储低八位,所以通过和0xff进行位于运算以后只保留低八位,其他的清零,最后通过位或运算符将4个字节的内容按照位置进行合并。使用这种方式利用底层的位运算符提高了代码的执行效率。

 

代码2

//int转换为byte数组

int n = 12345;

String s = String.valueOf(n);

byte[] b = s.getBytes();

//byte数组转换为int

String s1 = new String(b1);

int m = Integer.parseInt(s1);

       点评:代码2虽然在代码行数上比代码1少,但是无论是在程序的执行效率还是内存使用上都比代码1差了很多,每次转换时都需要生成一个String对象,这样不但浪费了内存,也降低了程序的执行速度。

 

       

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值