标签:
Object类的Outline图:
通过eclipse查看源码可以发现,在Object类当中基本上都是native方法(本地方法),对于它们的实现就不作了解了
getClass: 获得当前类的Class对象
hashCode:获取当前类地址的hash码
equals:比较两个对象是否相等,对于Object比较的为地址
clone:克隆对象
notify:唤醒睡眠的线程
notifyAll:唤醒睡眠的所有线程
wait:进入睡眠状态,并放弃cpu资源,等待唤醒
finalize:调用垃圾回收器
下面主要是追踪一下toString方法的实现:(输出当前类名 + @ + 当前类所在地址对应hash码的十六进制数)
1 public String toString() { 2 return getClass().getName() + "@" + Integer.toHexString(hashCode()); 3 }
下面是toHexString的实现与相关代码:
public static String toHexString(int i) { return toUnsignedString(i, 4); } private static String toUnsignedString(int i, int shift) { char[] buf = new char[32]; int charPos = 32;
//radix = 2^shift,也就是对应于要转换的进制数,对于这个可以查看Integer类中的toBinaryString方法,会发现对应的shift为1,也就是二进制 int radix = 1 << shift;
//用于获得i后mask位所对应的十进制数 int mask = radix - 1; do {
//把i后mask位所对应的进制字符保存在buf数组中 buf[--charPos] = digits[i & mask];
//让i去掉已经转化的位数,最终实现把i转换成相应的进制数 i >>>= shift; } while (i != 0); //把转换后的字符所在的数组转换成String输出,在底层实际是通过System类的arraycopy方法拷贝来实现去掉buf前面的空格的 return new String(buf, charPos, (32 - charPos)); } final static char[] digits = { ‘0‘ , ‘1‘ , ‘2‘ , ‘3‘ , ‘4‘ , ‘5‘ , ‘6‘ , ‘7‘ , ‘8‘ , ‘9‘ , ‘a‘ , ‘b‘ , ‘c‘ , ‘d‘ , ‘e‘ , ‘f‘ , ‘g‘ , ‘h‘ , ‘i‘ , ‘j‘ , ‘k‘ , ‘l‘ , ‘m‘ , ‘n‘ , ‘o‘ , ‘p‘ , ‘q‘ , ‘r‘ , ‘s‘ , ‘t‘ , ‘u‘ , ‘v‘ , ‘w‘ , ‘x‘ , ‘y‘ , ‘z‘ };
测试demo:
package com.topview.test; public class IntegerTest { private static String toUnsignedString(int i, int shift) { char[] buf = new char[32]; int charPos = 32; int radix = 1 << shift; int mask = radix - 1; do { buf[--charPos] = digits[i & mask]; i >>>= shift; } while (i != 0); return new String(buf, charPos, (32 - charPos)); } final static char[] digits = { ‘0‘, ‘1‘, ‘2‘, ‘3‘, ‘4‘, ‘5‘, ‘6‘, ‘7‘, ‘8‘, ‘9‘, ‘a‘, ‘b‘, ‘c‘, ‘d‘, ‘e‘, ‘f‘, ‘g‘, ‘h‘, ‘i‘, ‘j‘, ‘k‘, ‘l‘, ‘m‘, ‘n‘, ‘o‘, ‘p‘, ‘q‘, ‘r‘, ‘s‘, ‘t‘, ‘u‘, ‘v‘, ‘w‘, ‘x‘, ‘y‘, ‘z‘ }; public static void main(String[] args) { System.out.println(toUnsignedString(12, 4)); } }
标签:
原文地址:http://www.cnblogs.com/D-Key/p/4504736.html