java long 详解_JavaSE之Long 详解 Long的方法简介以及用法

基本功能

Long 类在对象中包装了基本类型 long 的值 每个 Long 类型的对象都包含一个 long 类型的字段

static long MAX_VALUElong 8个字节 最大值2^63-1 十六进制: 0x8000000000000000L

static long MIN_VALUE最小值-2^63 十六进制: 0x7fffffffffffffffL

static int SIZE二进制补码形式表示值时的位数 @Native public static final int SIZE = 64; 8个字节就是64位

static Class TYPE表示基本类型 long 的 Class 实例

方法分类

实例方法

构造方法 可以通过long或者String构造 字符串参数形式的方法, 内部调用parseLongjava.lang.Long.Long(long) java.lang.Long.Long(String)

获取指定类型的值 直接返回强转形式 比如: (byte)value (short)value ......java.lang.Long.byteValue() java.lang.Long.shortValue() java.lang.Long.intValue() java.lang.Long.longValue() java.lang.Long.floatValue() java.lang.Long.doubleValue()

对象常规方法 toString依赖静态方法 static String toString(long i) hashCode 依赖静态方法 hashCode static int hashCode(long value) equals 比较内部值是否相同 compareTo 依赖静态方法static int compare(long x, long y)java.lang.Long.toString() java.lang.Long.hashCode() java.lang.Long.equals(Object) java.lang.Long.compareTo(Long)

此系列都是获取指定系统属性的long值相关 第一个参数是通过 System.getProperty(java.lang.String) 方法可以访问到的系统属性的名称 以 long 值的形式解释此属性的字符串值,并返回表示此值的 Long 对象 也就是说参数String为一个系统属性的字符串名称 如果指定名称没有属性,或者指定名称为空或 null,抑或属性不具有正确的数字格式时,则返回 null 并不是转换解析字符串为Long,并不是转换解析字符串为Long,并不是转换解析字符串为Long,java.lang.Long.getLong(String) java.lang.Long.getLong(String, long) java.lang.Long.getLong(String, Long)

由上面实例方法的依赖性也可以看得出来,Long类本身静态方法的强大

静态工具方法

toXXXString就是转换为String形式 具体的XXX是什么就是转换为 什么 toString(long, int)转换为指定进制表示的字符串形式,toString(long)为简化版默认十进制toString(long) toString(long, int)

toUnsignedString(long, int)转换为指定进制表示的无符号整数的字符串形式 toUnsignedString(long)为简化版默认十进制toUnsignedString(long, int) toUnsignedString(long)

以十六进制无符号整数形式返回 long 参数的字符串表示形式 以八进制无符号整数形式返回 long 参数的字符串表示形式 以二进制无符号整数形式返回 long 参数的字符串表示形式toHexString(long) toOctalString(long) toBinaryString(long)

parseLong 都是将字符串解析为long, 基本类型! parseLong(String, int)将 string 参数解析为第二个参数指定进制形式的有符号的 long parseLong(String)为简化形式,默认十进制 parseUnsignedLong是parseLong的无符号形式 类似,双参数指定基数进制,单参数默认十进制 使用时需要注意,对应基数(进制)的转换,需要对应的字符,比如十进制你就不能出现十六进制的AparseLong(String, int) parseLong(String) parseUnsignedLong(String, int) parseUnsignedLong(String)

valueOf都是将字符串解析为Long, 包装类型 但是,在-128~127之间会使用缓存的值,不在范围内的创建新对象 所以,除非有必要特意创建对象,否则应该使用这个来获取Long对象 valueOf(String, int) 转换指定基数的字符串为Long, valueOf(String)为他的十进制形式valueOf(String, int) valueOf(String) valueOf(long)

hashCode(long)

对于基本类型long的求和 和 大小比较,返回符合条件的longsum(long, long) max(long, long) min(long, long)

可以直接将指定形式的字符串进行解析 根据字符串的前缀进行自动匹配 然后,返回一个Longdecode(String)

比较大小与无符号比较大小 无符号的先转换下,然后调用comparecompare(long, long) compareUnsigned(long, long)

无符号的商与求余divideUnsigned(long, long) remainderUnsigned(long, long)

返回符号 如果指定值为负,则返回值 -1 如果指定值为零,则返回 0 如果指定值为正,则返回 1signum(long)

reverse表示翻转,翻转就是从前往后颠倒过来 逐个比特进行翻转 或者逐个字节(也就是8位为一个单位)进行翻转 看下图就很容易理解 188的二进制 1011 1100reverse(long) reverseBytes(long)

rotate表示循环移位 循环左移和循环右移 移位负数距离等同于另一个方向的移位rotateLeft(long, int) rotateRight(long, int)

api解释比较抽象,直白的说就是二进制补码序列中 选择从左边开始数(高位)第一个1 或者从右边开始数(低位)第一个1 其余的位置全都写0 所以,对于highestOneBit 如果是0 返回0 ,因为没有一个1 如果是负数,返回的就是最左边一位是1 其余全都是0 也就是Long的最小值 如果是正数,第一位就是原来的最高位,但是抹掉了所有的零头,就是小于等于这个数的第一个2的N次方 对于highestOneBit 如果是0 返回0 否则返回的将是2的N次方 形如1 ....n个零highestOneBit(long) lowestOneBit(long)

与highestOneBit 和 lowestOneBit,本质是互通的,找到了1的位置也就知道了0的个数 知道了0的个数,也就找到了1的位置 返回的是这两个位置的地方,左边和右边的零的个数numberOfLeadingZeros(long) numberOfTrailingZeros(long)

返回二进制补码形式下1的个数bitCount(long)

特别注意:

value of 与new LongvalueOf就是根据指定的long或者String 返回一个Long对象

java.lang.Long.valueOf(long)是根本方法

c791048bfb43519b45c1fa16c5775148.png

可以看得出来,他会使用LongCache缓存256个对象(0~255)静态内部类,使用的时候,static块中初始化

b769488fcaf949d450dcc252a12834b6.png

java.lang.Long.valueOf(String, int)是借助于parseLong进行转换

c57c169b0763892041a48e7c7e4fb43a.png

java.lang.Long.valueOf(String)是他的默认的十进制形式的

846dee36abbc1f6b205694fd5dda8742.png

简言之就是最核心是valueOf(long),在指定范围内他是有缓存的,不在指定范围内,那么将会创建对象 所以,如果可以,尽量不要使用new Long

parseLong

从valueOf看得出来,带参数的借助的都是parseLong parseLong是返回的long 基本数据类型,valueOf相当于他的装箱形式(当然,valueOf还有使用缓存数据的功能)

decode(String nm)

decode将字符串转换为Long,听起来好像跟valueOf 差不多 都是根据字符串转变为Long对象 但是ValueOf要么指定基数要么就是默认十进制,而且不认识0X.#这种形式 decode不需要指定基数,可以根据字符串的前缀进行自己判断基数,用起来比valueOf更加灵活

getLong

getLong根本就不是看起来的样子 java.lang.Long.getLong(String) java.lang.Long.getLong(String, long) java.lang.Long.getLong(String, Long) 他只是valueOf的一个非常小的子集,仅仅是字符串为系统属性的某个变量名时,才是可以用的 ,才是可以解析的 你传入getLong("16"),根本不行

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值