Java学习笔记19

Objects是Java 7新增的一个工具类,它提供了一些工具方法来操作对象,这些工具方法大多是“空指针”安全的。

Objects实现的方法如下:

(1)hasCode(Object)方法在源码中是如何实现的:

 public static int hashCode(Object o) {
        return o != null ? o.hashCode() : 0;
    }

原来在hasCode(Object)方法中多做了一层判断,如果这个对象为null 的话,就返回一个int型的0给它,相反这个对象

不为null 的话,就获取它的哈希值,也就是说我们在使用这个方法时,就不必在意对象是否为空。

(2)hash(Object... values)方法在源码中如何实现的:

public static int hash(Object... values) {
        return Arrays.hashCode(values);
    }

在上面的程序中可以看到,传入的参数是可变的因为使用了Object来修饰,并通过...来实现传入的参数可以是多个不

同类型的参数。

接着来看看Arrays.hashCode(values)是如何实现的:

 public static int hashCode(Object a[]) {
        if (a == null)
            return 0;

        int result = 1;

        for (Object element : a)
            result = 31 * result + (element == null ? 0 : element.hashCode());

        return result;
    }

原来是通过foreach循环来获取每个传入的元素的哈希值,并将每个元素的哈希值通过 result = 31 * result + (element

== null ? 0 : element.hashCode());来相加,最后获得每个哈希值累加后的值。

(3)toString(Object o)方法在源码中是如何实现的:

public static String toString(Object o) {
        return String.valueOf(o);
    }

关于String.valueOf(Object o)在源码中实现的方式:

 public static String valueOf(Object obj) {
        return (obj == null) ? "null" : obj.toString();
    }

还是老样子,判断对象是否为空,如果为空就返回"null"字符串,反之,获取这个对象的信息并返回。

(4)toString(Object o, String nullDefault)方法在源码中的实现方式:

 public static String toString(Object o, String nullDefault) {
        return (o != null) ? o.toString() : nullDefault;
    }

和上面的toString(Object o)方法一样,获取对象的信息,唯一不同的是,如果对象为空,就返回自定义的nullDefault

字符串。

转载请注明出处:http://blog.csdn.net/hai_qing_xu_kong/article/details/43927021   情绪控_

时间: 2024-10-14 05:56:11

Java学习笔记19的相关文章

我的java学习笔记(19)关于代理

1.利用代理可以在运行时创建一个实现了一组给定接口的新类.这种功能只有在编译时无法确定需要实现哪个接口时才有必要使用. 2.调用处理器是实现了InvacationHandler接口的类对象. 3.无论何时调用代理对象的方法,调用处理器的invoke方法都会被调用,并向其传递Method对象和原始的调用参数.调用处理器必须给出处理调用的方式. 4.想要创建一个代理对象,需要使用Proxy类的newProxyInstance方法. 该方法的三个参数: a.一个类加载器 b.一个Class对象数组 c

java学习笔记3——java关键字

java学习笔记3——java关键字 虽然老师说不用刻意的去记忆,但是我还是在网上找到了非常详细的注解,再次收藏 关键字的类型表: 各个关键字的详细注解和实例,按首字母排序: 1.abstract abstract 关键字可以修改类或方法. abstract 类可以扩展(增加子类),但不能直接实例化. abstract 方法不在声明它的类中实现,但必须在某个子类中重写. -示例- public abstract class MyClass{ } public abstract String my

【Java学习笔记之二十六】深入理解Java匿名内部类

在[Java学习笔记之二十五]初步认知Java内部类中对匿名内部类做了一个简单的介绍,但是内部类还存在很多其他细节问题,所以就衍生出这篇博客.在这篇博客中你可以了解到匿名内部类的使用.匿名内部类要注意的事项.如何初始化匿名内部类.匿名内部类使用的形参为何要为final. 一.使用匿名内部类内部类 匿名内部类由于没有名字,所以它的创建方式有点儿奇怪.创建格式如下: new 父类构造器(参数列表)|实现接口() { //匿名内部类的类体部分 } 在这里我们看到使用匿名内部类我们必须要继承一个父类或者

Java学习笔记之继承

一.继承的基础 在Java术语中,被继承的类叫超类(superclass),继承超类的类叫子类(subclass). 举例说明: 1 class Box 2 { 3 public double width; 4 public double height; 5 public double depth; 6 7 //重载构造方法 8 public Box(Box ob) 9 { 10 width = ob.width; 11 height = ob.height; 12 depth = ob.dep

Java学习笔记之接口

一.接口的概念与定义 首先考虑一个简单的接口的定义: public interface Output { int MAX_LINE = 40; void out(); void getData(String msg); } 定义接口使用关键字interface 修饰符interface前面的public可以省略,如果省略,则采用默认访问控制,即只有在相同包结构的代码才可以访问此接口 接口不可以有构造方法(区别于类中的构造方法) 接口里面的所有成员,包括常量.方法等都是public访问权限,所以在

Oracle 学习笔记 19 -- 触发器和包浅析(PL/SQL)

触发器是存放在数据库中的一种特殊类型的子程序.不能被用户直接调用,而是当特定事件或操作发生时由系统自己主动 调用执行.触发器不能接受參数.所以执行触发器就叫做触发或点火.Oracle事件指的是数据库的表进行的insert .update.delete操作或对视图进行类似的操作. 触发器是很多关系数据库系统都提供的一项技术.在Oracle系统里,触发器类似过程和函数,都有声明,运行和异常 处理过程的PL/SQL块. 触发器的组成: 触发事件:在何种情况下触发:比如:INSERT , UPDATE

java学习笔记 第二篇 核心技术(二)

第十四章 集合类 集合类用来存放对象的引用.继承关系如下图: 14.1 Collection 接口 是层次结构中的根接口,构成Collection的单位称为元素.Collection接口不能直接使用,但该接口提供了添加元素.删除元素.管理数据的方法. Collection接口常用方法: 14.2 List 集合 包括List接口以及List集合的所有实现类.List集合中的元素允许重复,各元素循序就是对象插入的顺序 1.List接口,两个重要方法: get(int index): 获取指定索引位

springmvc学习笔记(19)-RESTful支持

springmvc学习笔记(19)-RESTful支持 springmvc学习笔记19-RESTful支持 概念 REST的样例 controller REST方法的前端控制器配置 对静态资源的解析 本文介绍RESTful的概念,并通过一个小样例展示怎样编写RESTful风格的controller和配置前端控制器,最后展示静态资源的解析 概念 首先附上两篇博客链接 理解RESTful架构 - 阮一峰的网络日志 RESTful API 设计指南- 阮一峰的网络日志 RESTful架构.就是眼下最流

Java学习笔记_19_String类

19.String类: 1>String类的构造方法: · 利用字符串构造一个字符串对象: String str = "HelloWorld": · 无参构造一个字符串对象: String str = new String(); · 传递参数生成一个字符串对象: String str = new String("HelloWorld"); · 由字符数组生成一个字符串对象: String str = new String(char s[ ]); · 由字符数组