Effective java 第二章 对象 (2)

不要创建不必要的对象

一.一些对象创建后不会在更改,可重复使用的对象不比在重新创建。

二.能使用基本类型计算而尽量使用基本类型,包装类型在效率上比基本类型要低

 比如:

public static void main(String[] args) {
Long i=0L;

//long i=0L;
for(int j=0;j<1000000;j++){
i+=1;
}

循环一百万次    Long 类型  时间差  32      long 类型  时间差  7    

原因是 ,使用Long类型进行运算是,jvm会自动将i拆箱成long对象运算,然后在装箱成Long对象,循环在不断的拆箱和装箱,所以效率会很低

 关于对象的equals方法和hashcode方法

说到equals方法 ,肯定要说== ,这两者的区别 ,简单的说就是equals比较的是对象的“值”是否相等,

==分为两种情况 ,复合对象比较的是否为同一个对象,比较的是他们在内存中的存放地址。如果是基本类型使用==则是比较他们的值。

判断对象是否equals则是对象的equals方法

重写equals方法时必须要重写hashcode方法

why?

比如   有一个cat类,重写了 equals方法。然后 使用hashmap 存储 map.put(new cat(name),"112");  

           然后在 map.get(new cat(name));    返回值 是 null

 why?

      hashmap 首先put 方法将对象 根据hashcode放入对应的hashbucket 中,hashmap 执行get方法时会先根据key对象的hashcode从hashbucket寻找,

如果相同再调用对象的equals方法, 所以上述的map map.get(new cat(name))对象是找不到 value的 ,因为cat对象没有重写hashcode方法。

 

 

时间: 2024-10-10 14:42:38

Effective java 第二章 对象 (2)的相关文章

Effective java 第二章 对象 (1)

这章主要说了对象的 创建和销毁,怎样避免无谓,过多的对象,以及创建对象的几个方法  一.使用静态工厂方法代替构造器, 正常的创建类的方法    OneObject  oneObject=new OneObject();       这样写的话,每次都会创建一个新的对象 静态工厂方法             public class OneObject { private static OneObject oneObject=new OneObject(); private String name

Effective java 第二章创建和销毁对象 读书笔记

建和销毁对象 一般有两种方式,一种是获得本身的实例,最常用的方法就是提供一个共有的构造器.第二个方法是,类可以提供一个共有的静态工厂方法. 静态工厂方法与构造器不同的三大优势: 有名字: 调用时不用创建新的对象: 返回原来类型的任何子类型对象. 第四大优势: 在创建参数化类型实例的时候,它们使代码变得更加简洁. 服务提供者框架 三个组件: 服务接口 提供者主持API 服务访问API 可选: 服务提供者接口 静态工厂方法的缺点: 类如果不含共有的或者受保护的构造器,就不能被子类化: 它们与其他的静

[Effective Java]第二章 创建和销毁对象

第一章      前言 略... 第二章      创建和销毁对象 1.            考虑用静态工厂方法代替构造器 创建对象方法:一是最常用的公有构造器,二是静态工厂方法.下面是一个Boolean的简单示例: public static Boolean valueOf(boolean b) { return (b ? Boolean.TRUE : Boolean.FALSE); } l  静态工厂方法与构造器不同的第一大优势在于,它们有名称. 作用不同的公有构造器只能通过参数来区别(因

Java第二章----对象和类

从第一章到第二章整整隔了一个月的时间,这速度也是慢的无语了.因为这个月负责开发公司一个SaaS类型APP,忙的昏天暗地终于上线了,这才有时间写个博客.本章还是以概念为主,有点枯燥重在理解. 第一节:对象 名词解释 OOA-Object Oriented Analysis-面向对象分析 OOD-Object Oriented Design-面向对象设计 OOP-Object Oriented Programming-面向对象程序设计 面向对象基本特性 万物皆可为对象:任何一件事物都可以表示为程序中

[读书笔记]Effective Java 第二章

考虑用静态工厂方法代替构造器 静态工厂方法第一大优势是可以用特有的名称.常见的类创建实例需要用构造函数,而当需要两个构造函数时,我们需要在参数列表做区分才能写出两个构造方法.使用静态工厂模式,可以规避方法名=类名的限制,使用更易读的方法呈现. 静态工厂方法第二大优势是不必在每次调用的时候创建一个新的实例.这点和单例设计模式有些类似,在使用不可变类的时候可以预先构建实例并缓存,之后可以重复利用,避免创建不必要的重复对象,也可以用静态工厂保证这是一个单例.可以确保不会存在两个相等的实例,即当且仅当a

Java 第二章 变量 、数据类型和运算符 笔记

Java 第二章 变量 .数据类型和运算符 一.变量:存储数据的一个基本单元. 二.变量的声明和赋值: 1)声明并赋值:数据类型 变量名=值;      例:int  price=1000; 2)声明.赋值分两步:数据类型 变量名;   例: int  price; 变量名=值;              price=1000; 三.数据类型2种: 1)基本数据类型8种: Byte 长度:-128~127(-2的7次方到2的7次方减1) Short   -2的15次方到2的15次方减1 Int

Effective Java 第二版 Enum

/** * Effective Java 第二版 * 第30条:用enum代替int常量 */ import java.util.HashMap;import java.util.Map; public class EnumTest { /*媒体操作*/ public final static int START = 1; public final static int PAUSE = 2; public final static int RESUME = 3; public final sta

Java 第二章

第二章笔记 什么是变量: 变量代表一块内存区域,变量类型不一样,这一块内存的大小也不一样. #在编程语言里面,你可以通过定义变量,向内存里添加数据或者修改内存已有的数据.说白了,变量就是代表程序运行时存放数据的地方 数据的存放: 磁盘.内存卡.U盘.光盘.内存条.固态.机械硬盘等等 简单的信息(临时的信息)纸 人把信息存在大脑 变量怎么在内存中存储 已将数据存储打内存中怎么去找 分配后的内存会有内存地址(内存地址不好记忆) :通过变量名可以简单快速地找到它存储的数据 Java定义的常用数据类型有

一切都是对象 Thinking in Java 第二章

2.1 用引用操作对象 1.对象和引用联系起来,就可以通过引用来操作对象: 2.引用亦可单独存在,即没有和任何对象联系起来:对没有和对象联系起来的引用操作,会报错: 2.2 必须由你创建所有对象 1.存储到什么地方 寄存器 堆栈:*快速存储销毁:基本类型存储的地方 堆:*常量池:一般对象存储的地方 常量存储 非RAM 2. 特例:基本类型 保存在 堆栈 中,这个变量直接存储值,所以更加高效一些: 高精度数字:BigInteger,BigDecimal; 2.3 永远不用销毁对象 垃圾回收机制 2