java中==和equals和hashCode的区别

== 的作用:

基本类型:比较的就是值是否相同

引用类型:比较的就是地址值是否相同(确切的说,是堆内存地址)

equals 的作用:

引用类型:默认情况下,比较的是地址值。

public boolean equals(Object anObject) {

2 if (this == anObject) {

3 return true;

4 }

5 if (anObject instanceof String) {

6 String anotherString = (String)anObject;

7 int n = value.length;

8 if (n == anotherString.value.length) {

9 char v1[] = value;

10 char v2[] = anotherString.value;

11 int i = 0;

12 while (n-- != 0) {

13 if (v1[i] != v2[i])

14 return false;

15 i++;

16 }

17 return true;

18 }

19 }

20 return false;

21 }

String类中被复写的equals()方法其实是比较两个字符串的内容

hashCode:

在Java中任何一个对象都具备equals(Object obj)和hashcode()这两个方法,因为他们是在Object类中定义的。

hashcode()方法返回一个int数,在Object类中的默认实现是“将该对象的内部地址转换成一个整数返回”。

hashcode是系统用来快速检索对象而使用

如果 x 和 y 的 hashCode() 不相等,那么 x.equals(y) 一定返回 “false” ;

int、char、long各占多少字节数

整型:

byte:1个字节 8位 -128~127

short :2个字节 16位

int :4个字节 32位

long:8个字节 64位

浮点型:

float:4个字节 32 位

double :8个字节 64位

char:2个字节。

Java多态性理解

用一句话概括就是:事物在运行过程中存在不同的状态

多态的存在有三个前提:

1.要有继承关系

2.子类要重写父类的方法

3.父类引用指向子类对,

String、StringBuffer、StringBuilder区别

StringBuffer、StringBuilder和String一样,也用来代表字符串。String类是不可变类,任何对String的改变都 会引发新的String对象的生成;StringBuffer则是可变类,任何对它所指代的字符串的改变都不会产生新的对象。既然可变和不可变都有了,为何还有一个StringBuilder呢?相信初期的你,在进行append时,一般都会选择StringBuffer吧!

先说一下集合的故事,HashTable是线程安全的,很多方法都是synchronized方法,而HashMap不是线程安全的,但其在单线程程序中的性能比HashTable要高。StringBuffer和StringBuilder类的区别也是如此,他们的原理和操作基本相同,区别在于StringBufferd支持并发操作,线性安全的,适 合多线程中使用。StringBuilder不支持并发操作,线性不安全的,不适合多线程中使用。新引入的StringBuilder类不是线程安全的,但其在单线程中的性能比StringBuffer高。

抽象类和接口的区别,使用场景

1、相同点

A. 两者都是抽象类,都不能实例化。

B. interface实现类及abstrct class的子类都必须要实现已经声明的抽象方法。

2.、不同点

A. interface需要实现,要用implements,而abstract class需要继承,要用extends。

B. 一个类可以实现多个interface,但一个类只能继承一个abstract class。

C. interface强调特定功能的实现,而abstract class强调所属关系。

D. 尽管interface实现类及abstrct class的子类都必须要实现相应的抽象方法,但实现的形式不同。interface中的每一个方法都是抽象方法,都只是声明的(declaration, 没有方法体),实现类必须要实现。而abstract class的子类可以有选择地实现。

3、interface的应用场合

A. 类与类之前需要特定的接口进行协调,而不在乎其如何实现。

B. 作为能够实现特定功能的标识存在,也可以是什么接口方法都没有的纯粹标识。

C. 需要将一组类视为单一的类,而调用者只通过接口来与这组类发生联系。

D. 需要实现特定的多项功能,而这些功能之间可能完全没有任何联系。

4、abstract class的应用场合

一句话,在既需要统一的接口,又需要实例变量或缺省的方法的情况下,就可以使用它。最常见的有:

A. 定义了一组接口,但又不想强迫每个实现类都必须实现所有的接口。可以用abstract class定义一组方法体,甚至可以是空方法体,然后由子类选择自己所感兴趣的方法来覆盖。

B. 某些场合下,只靠纯粹的接口不能满足类与类之间的协调,还必需类中表示状态的变量来区别不同的关系。abstract的中介作用可以很好地满足这一点。

C. 规范了一组相互协调的方法,其中一些方法是共同的,与状态无关的,可以共享的,无需子类分别实现;而另一些方法却需要各个子类根据自己特定的状态来实现特定的功能

final,finally,finalize的区别

final 用于申明属性,方法和类,表示属性不可变,方法不可以被覆盖,类不可以被继承。

finally 是异常处理语句结构中,表示总是执行的部分。

finallize 表示是object类一个方法,在垃圾回收机制中执行的时候会被调用被回收对象的方法。允许回收此前未回收的内存垃圾。所有object都继承了 finalize()方法

成员内部类、静态内部类、局部内部类和匿名内部类的理解,以及项目中的应用

一个静态内部类不需要外部类成员:这是静态内部类和成员内部类的区别。静态内部类的对象可以直接生成:

匿名内部类也就是没有名字的内部类

匿名内部类

正因为没有名字,所以匿名内部类只能使用一次,它通常用来简化代码编写

但使用匿名内部类还有个前提条件:必须继承一个父类或实现一个接口

java-string转换成integer的方式及原理

https://www.jianshu.com/p/9eebb4f2ccb1

String的特性

这说明了String的一个重要特性,String 是value不可改变的

然而String类还使用了final来修饰,表明String的第二个重要特性,,它的所有成员变量也都是final的。** String是不可被继承的**

Hashtable 与 HashMap 的简单比较

HashTable 基于 Dictionary 类,而 HashMap 是基于 AbstractMap。Dictionary 是任何可将键映射到相应值的类的抽象父类,而 AbstractMap 是基于 Map 接口的实现,它以最大限度地减少实现此接口所需的工作。

HashMap 的 key 和 value 都允许为 null,而 Hashtable 的 key 和 value 都不允许为 null。HashMap 遇到 key 为 null 的时候,调用 putForNullKey 方法进行处理,而对 value 没有处理;Hashtable遇到 null,直接返回 NullPointerException。

Hashtable 方法是同步,而HashMap则不是。我们可以看一下源码,Hashtable 中的几乎所有的 public 的方法都是 synchronized 的,而有些方法也是在内部通过 synchronized 代码块来实现。所以有人一般都建议如果是涉及到多线程同步时采用 HashTable,没有涉及就采用 HashMap,但是在 Collections 类中存在一个静态方法:synchronizedMap(),该方法创建了一个线程安全的 Map 对象,并把它作为一个封装的对象来返回。

List、Set、Map的区别

List:

1.可以允许重复的对象。

2.可以插入多个null元素。

3.是一个有序容器,保持了每个元素的插入顺序,输出的顺序就是插入的顺序。

4.常用的实现类有 ArrayList、LinkedList 和 Vector。ArrayList 最为流行,它提供了使用索引的随意访问,而 LinkedList 则对于经常需要从 List 中添加或删除元素的场合更为合适。

Set:

1 不允许重复对象

2 无序容器,你无法保证每个元素的存储顺序,TreeSet通过 Comparator 或者 Comparable 维护了一个排序顺序。

3 只允许一个 null 元素

Map:

Map不是collection的子接口或者实现类。Map是一个接口。

Map 的 每个 Entry 都持有两个对象,也就是一个键一个值,Map 可能会持有相同的值对象但键对象必须是唯一的。

TreeMap 也通过 Comparator 或者 Comparable 维护了一个排序顺序。

Map 里你可以拥有随意个 null 值但最多只能有一个 null 键。

HashSet 的源码是挺简单的,内部都是用 HashMap 来实现的。利用了 HashMap 的 key 不能重复这个原理来实现 HashSet 。

SparseArray两个数组mKeys、mValues分别存放int与Object,其默认长度为10,mKeys为有序列表,通过二分查找,找到要插入的key对应的index (这里相对于查找hash表应该算是费时间吧,但节省了内存,所以是 时间换取了空间)

通过二分查找到的index,将Value插入到mValues数组的对应位置

markdown

ArrayMap和SparseArray有点类似;其中含有两个数组,一个是mHashes(key的hash值数组,为一个有序数组),另一个数组存储的是key和value,其中key和value是成对出现的,key存储在数组的偶数位上,value存储在数组的奇数位上。

集合Set实现Hash怎么防止碰撞

重写hashcode()和equles()方法

WebSocket与socket的区别

Socket 是操作系统内置的一套操作 TCP/IP 协议的网络(套接字)的方法;

Websocket 是跟 HTTP 对应的,基于 TCP 协议之上的「长连接」协议。

对安卓签名的理解

应用可以被不同的签名文件签名(如果有源代码或者反编译后重新编译)

同一个应用如果签名不同则不能覆盖安装

Serializable原理

Serializable是Java为我们提供的一个标准化的序

Java原生序列化方式是通过实现Serializable接口实现的. 不实现该接口会导致无法序列化, 抛出异常

将对象转换为字节流, 用于网络传输, 例如用于RPC远程调用。

将对象保存到磁盘, 例如tomcat的钝化和活化.

transient关键字:这个类的有些属性需要序列化,而其他属性不需要被序列化,打个比方,如果一个用户有一些敏感信息(如密码,银行卡号等),为了安全起见,不希望在网络操作

https://juejin.im/entry/5bf622436fb9a04a0b21cbe7

原文

作者:快感的感知

链接:https://www.jianshu.com/p/5ed769dde6cc

java == hashcode,java中==和equals和hashCode的区别相关推荐

  1. java baseentity_如何在JPA的BaseEntity中实现equals()和hashcode()方法?

    我有一个BaseEntity类,它是我的应用程序中所有JPA实体的超类. @MappedSuperclass public abstract class BaseEntity implements S ...

  2. java引用类型和值类型_[Java教程]JavaScript中值类型和引用类型的区别

    [Java教程]JavaScript中值类型和引用类型的区别 0 2017-02-24 00:00:35 JavaScript的数据类型分为两类:原始类型和对象类型.其中,原始类型包括:数字.字符串和 ...

  3. java中的equals方法+hashCode方法

    [0]README 0.1)以下内容均为原创,包括源代码, 旨在理清 equals 和 hashCode 方法的 实现原理: 0.2) for full resource code, please v ...

  4. java中的equals和hashCode

    Java的每个类都继承于Object类.它使用equals()及hashCode()这两个方法来判断两个Object是否相等. 1.  equals() 需要满足5点: 1 自省:对于任一非null引 ...

  5. Java拾遗:001 - 重写 equals 和 hashCode 方法

    2019独角兽企业重金招聘Python工程师标准>>> 重写equals方法 在Java中Object类是一个具体类,但它设计的主要目的是为了扩展,所以它的所有非final方法,都被 ...

  6. Java基础提升篇:equals()与hashCode()方法详解

    概述 java.lang.Object类中有两个非常重要的方法: public boolean equals(Object obj) public int hashCode() Object类是类继承 ...

  7. 【JAVA基础篇】==、equals和hashCode的区别和联系

    == 作用:比较两个操作数的关系,返回一个boolean类型的结果 具体含义:如果两个操作数是基本数据类型,比较值是否相等.如果两个操作数是引用类型,那么比较的是内存地址是否相同. equals Ob ...

  8. 重写Java Object类中的equals()方法

    Java中的Object类中的equals方法 Object类的equals方法 重写Object类的equals()方法 Person类默认继承了Object类,所以可以使用Object类的equa ...

  9. java ==和===_java中==和equals的区别详解

    分析前基础了解: 一)JVM把内存划分成两种:一种是栈内存,一种是堆内存. ①在函数中定义的一些基本类型的变量和对象的引用变量(变量名)都在函数的栈内存中分配. ②当在一段代码块定义一个变量时,Jav ...

最新文章

  1. c# IO线程 打造 定时打开指定程序
  2. 【干货】Oracle数据库常用十一大操作指令
  3. java getrealpath_JavaEE路径陷阱之getRealPath
  4. 分计算iv值_快捷、经济、实用的光伏及IV曲线测试仪PVPM 1500X
  5. 安装Qemu-6.1.0
  6. oracle常用的字符串函数,Oracle的常用字符函数实验展示
  7. ESP32-IDF给FATFS添加长文件名支持,更改_USE_LFN以支持大于8.3格式的文件名
  8. AIR:使用 HTML + Javascript 开发桌面应用
  9. MySQL/InnoDB中,对于锁的认识
  10. 基于Unity的极乐净土/others MMD动画制作
  11. 计算机流体仿真,计算机流体模拟仿真及其工程应用
  12. 您的 App 包含 NSUserTrackingUsageDescription,这表示您将会请求追踪用户。要在
  13. 基于matlab的Guass列主元素消去法
  14. 特征值+SVD分解+伪逆(广义逆)
  15. 永洪科技贺新颖:业务中台+数据中台,赋能企业核心业务
  16. java反序列化成object_java 反序列化输出 object获取为空的问题
  17. mysql引擎与优化
  18. kline 专业金融K线绘制库
  19. 基于RK3308的ROS运行环境搭建和交叉编译
  20. springboot+vue新生宿舍报修管理系统

热门文章

  1. VS2010中预处理器定义
  2. POJ 1258 Agri-Net (最小生成树)
  3. Python之字符串转换为日期、结合时区的日期操作
  4. unity json解析IPA后续
  5. 如何加快Json 序列化?有哪些方法?
  6. css控制页面文字不能被选中user-select:none;
  7. Design a high performance cache for multi-threaded environment
  8. (X)HTML嵌套规则
  9. ftp put 550 Access is denied
  10. 纯php socket mysql_PHP 连接 unix_socket MySQL