Long 类的几个静态方法

看到Long这个类,颇感亲切,今天研究Long类的几个静态方法。

 

如果想把long类型数据转换为字节数组byte[ ],使用 Long.toString(l).getBytes()方法,但是这种转换很山寨。所以研究一下ing......

 

细心的人会发现这种算法,只是将long数据每一位转换为一个字节,如果你定义long = 12345L,那么就会得到5个字节。如果你定义long =

123456789L,那么就会得到9个字节。思考一下,这样产生的问题是什么?!

 

yes,long类型数据占有个字节,怎么会5、9呢?你可以测试一把,证明我所说的是否正确!呵呵!

研究一下String类的getBytes方法,其实etBytes调用StringCoding类的方法,将数字转换为字符char,并且使用ISO-8859-1编码,看一下:

 

 

 

我们知道,数字1对应的Ascii码就是1,但是字符‘1’对应的Ascii码却是31,有图为证:

所以,测试中你会发现1234L变成了49、50、51、52(这是十进制数,对应Ascii码的31、32、33、34)。

当然,如果你愿意的话,getBytes(Charset charset)方法可以指定其他字符编码。

现在,针对上面的“山寨”方法convertLongToByteArray,我需要将字节数组转换为long,看代码:

 

将String 转换为long,下面几个方法都可以:

 

valueOf方法,调用parseLong(String s, int radix)方法,其中参数radix表示基数即何种进制:

 

可见valueOf方法,调用parseLong方法,使用10进制为基数。研究一下parseLong(String s, int radix)源码:

 

有兴趣可以去看看getLong方法,它本质是调用valueOf方法,而valueOf方法本质是调用parseLong方法,所以在你的代码中应该使用哪个方法,你应该明白啦!

 

ok,到此为止!

 

感谢:http://www.asciitable.com/ 提供Ascii码表,另附一张图如下:

 

 

 

 

 

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值