java封装数据类型——Long
Long 是长整型 long 的封装数据类型。我们知道 long 相对于 int 的差异就是数据表示的范围扩大了,其它大部分特性都是一样的。所以 Long 跟 Integer 大部分方法都是相同的。
Integer 学习篇:https://www.cnblogs.com/coding-one/p/11387983.html
下面列出一些有差异的特性:
1. 缓存机制
跟 Integer 类型一样,Long 也提供了缓存机制。那么是不是如 long 比 int 范围大,Long 比 Integer 缓存范围也要大呢?其实没有。而且 Long 型取消缓存最大值的配置性,直接设定 缓存范围是 [-128, 127] 。
private static class LongCache {
private LongCache(){}
static final Long cache[] = new Long[-(-) + + ];
static {
for(int i = ; i < cache.length; i++)
cache[i] = new Long(i - );
}
}
2. hashCode() 值
Integer 类型 hashCode 值就是它保存的 int 值,那么 Long 是否也是它所保存的 long 值呢?答案当然是否。因为根据常规约定,hashCode 值是一个 int 数值,long 型显然不合适,于是 Long 对其值做了处理,以得到一个 int 类型能够表示的值:
public static int hashCode(long value) {
return (int)(value ^ (value >>> ));
}
可以看出,Long 将 值进行操作得到 hashCode:
2.1. long 值 按位补零右移32位,此时得到的结果的高32位全部是0,而低32位则是原来的高32位;
2.2. 将 2.1 中得到的结果与 long 值按位异或运算,此时得到的值的高32位与原 long 值的一样,低32位是原 long 值的高32位与低32位异或的结果;
2.3. 将 2.2 中得到的 long 值结果强制转换成 int 型;
上述步骤中最关键的就是 按位异或 了,强转之后,高位已经丢失,留下按位异或后的低位,这样就能得到相对散列的哈希值了。
下面我们举一个缩小版的例子:
约定:
1. 使用一个字节类比 long 型,半个字节(4 bits)类比 int 型;
2. 使用原码表示法;
3. 无符号位;
目的:将大于 15(4个bits能够表示的最大值)的数计算后得到 [0, 15](无符号原码 4 bits能够表示的范围)之间的数值。
例子:248、43
1. 上述两个数的无符号源码表示为:11111000、00101011
2.分别补零右移4位得到:00001111、00000010
3.右移前后按位异或得到:11110111、00101001
4.丢弃高位后得到:0111、1001
5.转换成数值为:7、9
可以看到,在原码表示法下,原来使用 4个bit位表示不了的的两个数 248 和 43 ,通过一系列按位运算,现在散列在了 4 个 bit 能够表示的数值,目的达到了。
注意:上述只是一个简单的类比的例子,实际计算机中计算的是补码,而且字节长度分别为 8 bytes 和 4 bytes。
java封装数据类型——Long的更多相关文章
- java封装数据类型——Integer
今天来学习整型 int 的封装数据类型,Integer. 1. 定义 首先来看看定义.可以看到,Integer 继承 Number 抽象类,实现了 Comparable 接口.Number 类是常用数 ...
- java封装数据类型——Boolean
众所周知,java对常见的原始数据类型都提供了对应的封装类型,增加一些常用的特性(如 计算hash值.比较相等.类型转换等),以扩展他们对数据处理的能力,使得他们更好地适应面向对象编程的各种场景.今天 ...
- java封装数据类型——Byte
Byte 是基本类型byte的封装类型.与Integer类似,Byte也提供了很多相同的方法,如 decode.toString.intValue.floatValue等,而且很多方法还是直接类型转换 ...
- java封装数据类型——Integer 缓存策略验证
上一篇学习 Integer 类型源码,知道了它使用缓存策略,默认对 [-128, 127] 范围的对象进行类加载时自动创建缓存. Integer 源码学习:https://www.cnblogs.co ...
- 【转】java基本数据类型vs封装数据类型
1.基本概念 说java是面向对象的语言是正确的,但是她不纯,基本数据类型就不是对象. 基本数据类型可以大致分为三类:数据型:int.short.long.byte.float.double字符型:c ...
- Java 基本数据类型 sizeof 功能【转】
转自:http://blog.csdn.net/sunboy_2050/article/details/7310008 版权声明:本文为博主原创文章,未经博主允许不得转载. Java基本数据类型int ...
- java基础之java基本数据类型
1.Java数据类型基本概念: 数据类型在计算机语言里面,是对内存位置的一个抽象表达方式,可以理解为针对内存的一种抽象的表达方式.接触每种语言的时候,都会存在数据类型的认识,有复杂的.简单的,各种数据 ...
- Java基本数据类型总结、类型转换、常量的声明规范,final关键字的用法
1 Java 基本数据类型 变量就是申请内存来存储值.也就是说,当创建变量的时候,需要在内存中申请空间. 内存管理系统根据变量的类型为变量分配存储空间,分配的空间只能用来储存该类型数据. 因此,通过 ...
- Java 基本数据类型 sizeof 功能
Java 基本数据类型 sizeof 功能 来源 https://blog.csdn.net/ithomer/article/details/7310008 Java基本数据类型int 32b ...
随机推荐
- mac下如何安装python3?
1. 安装homebrew $ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/insta ...
- LC 918. Maximum Sum Circular Subarray
Given a circular array C of integers represented by A, find the maximum possible sum of a non-empty ...
- MERN——MongoDB && React && Node && Express
原文链接:Let’s build a full stack MongoDB, React, Node and Express (MERN) app github源码地址:jelorivera08/re ...
- Qps 和 tps的解释
QPS:Queries Per Second意思是“每秒查询率”,是一台服务器每秒能够相应的查询次数,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准. TPS:是Transactions ...
- LODOP在页面让客户选择打印机
获取打印机列表可以放在onload事件里,如过当前是使用的c-lodop,由于websoket链接需要时间,一进入页面可能会报错,被准备好或网页没下载完成等,也可以在点击事件里让用户获取打印机.之前写 ...
- 给 textbox TextMode="password" 赋值后显示出来
在做一个修改用户资料的页面的时候,发现用 <asp:TextBox ID="txtPwd" runat="server" TextMode="P ...
- python多进程——fork()
简介 程序每次执行时,操作系统都会创建一个新进程来运行程序指令.进程中可调用os.fork,要求操作系统新建一个子进程.[Windowsc系统中,os模块没有os.fork函数]. 每个进程都有 ...
- charles 验证工具
本文参考:charles 验证工具 验证工具/validate 验证工具 Charles可以通过发送到W3C HTML验证器,W3C CSS验证器和W3C Feed验证器来验证记录的响应. 验证报告在 ...
- Direct2D 学习笔记(2)画刷 Brush
画刷的使用方法 需要包含的文件:<wincodec.h> 需要包含的库: "windowscodecs.lib" 资源网址: https://docs.micro ...
- java、ruby、python、php等如何生成excel文档?
excel在我们日常工作生活中会经常用到,通常我们都是用office软件去编写文档.但是对于格式一致的excel文档,如果还是使用人工完成,那绝不是我们软件工程师的姿态了~ 下面我就介绍一种方法,不需 ...