java中==和equals和hashCode的區(qū)別

java中==和equals和hashCode的區(qū)別

== 的作用:
  基本類型:比較的就是值是否相同
  引用類型:比較的就是地址值是否相同(確切的說,是堆內(nèi)存地址)
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()方法其實是比較兩個字符串的內(nèi)容

hashCode:

在Java中任何一個對象都具備equals(Object obj)和hashcode()這兩個方法,因為他們是在Object類中定義的。

hashcode()方法返回一個int數(shù),在Object類中的默認實現(xiàn)是“將該對象的內(nèi)部地址轉換成一個整數(shù)返回”。

hashcode是系統(tǒng)用來快速檢索對象而使用

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

int、char、long各占多少字節(jié)數(shù)

整型:

byte:1個字節(jié) 8位 -128~127

short :2個字節(jié) 16位

int :4個字節(jié) 32位

long:8個字節(jié) 64位

浮點型:

float:4個字節(jié) 32 位

double :8個字節(jié) 64位

char:2個字節(jié)。

Java多態(tài)性理解

用一句話概括就是:事物在運行過程中存在不同的狀態(tài)

多態(tài)的存在有三個前提:
1.要有繼承關系
2.子類要重寫父類的方法
3.父類引用指向子類對,

String、StringBuffer、StringBuilder區(qū)別

StringBuffer、StringBuilder和String一樣,也用來代表字符串。String類是不可變類,任何對String的改變都 會引發(fā)新的String對象的生成;StringBuffer則是可變類,任何對它所指代的字符串的改變都不會產(chǎn)生新的對象。既然可變和不可變都有了,為何還有一個StringBuilder呢?相信初期的你,在進行append時,一般都會選擇StringBuffer吧!

先說一下集合的故事,HashTable是線程安全的,很多方法都是synchronized方法,而HashMap不是線程安全的,但其在單線程程序中的性能比HashTable要高。StringBuffer和StringBuilder類的區(qū)別也是如此,他們的原理和操作基本相同,區(qū)別在于StringBufferd支持并發(fā)操作,線性安全的,適 合多線程中使用。StringBuilder不支持并發(fā)操作,線性不安全的,不適合多線程中使用。新引入的StringBuilder類不是線程安全的,但其在單線程中的性能比StringBuffer高。

抽象類和接口的區(qū)別,使用場景

1、相同點
A. 兩者都是抽象類,都不能實例化。
B. interface實現(xiàn)類及abstrct class的子類都必須要實現(xiàn)已經(jīng)聲明的抽象方法。

2.、不同點
A. interface需要實現(xiàn),要用implements,而abstract class需要繼承,要用extends。
B. 一個類可以實現(xiàn)多個interface,但一個類只能繼承一個abstract class。
C. interface強調(diào)特定功能的實現(xiàn),而abstract class強調(diào)所屬關系。
D. 盡管interface實現(xiàn)類及abstrct class的子類都必須要實現(xiàn)相應的抽象方法,但實現(xiàn)的形式不同。interface中的每一個方法都是抽象方法,都只是聲明的(declaration, 沒有方法體),實現(xiàn)類必須要實現(xiàn)。而abstract class的子類可以有選擇地實現(xiàn)。
3、interface的應用場合
A. 類與類之前需要特定的接口進行協(xié)調(diào),而不在乎其如何實現(xiàn)。
B. 作為能夠實現(xiàn)特定功能的標識存在,也可以是什么接口方法都沒有的純粹標識。
C. 需要將一組類視為單一的類,而調(diào)用者只通過接口來與這組類發(fā)生聯(lián)系。
D. 需要實現(xiàn)特定的多項功能,而這些功能之間可能完全沒有任何聯(lián)系。

4、abstract class的應用場合
一句話,在既需要統(tǒng)一的接口,又需要實例變量或缺省的方法的情況下,就可以使用它。最常見的有:
A. 定義了一組接口,但又不想強迫每個實現(xiàn)類都必須實現(xiàn)所有的接口??梢杂胊bstract class定義一組方法體,甚至可以是空方法體,然后由子類選擇自己所感興趣的方法來覆蓋。
B. 某些場合下,只靠純粹的接口不能滿足類與類之間的協(xié)調(diào),還必需類中表示狀態(tài)的變量來區(qū)別不同的關系。abstract的中介作用可以很好地滿足這一點。
C. 規(guī)范了一組相互協(xié)調(diào)的方法,其中一些方法是共同的,與狀態(tài)無關的,可以共享的,無需子類分別實現(xiàn);而另一些方法卻需要各個子類根據(jù)自己特定的狀態(tài)來實現(xiàn)特定的功能

final,finally,finalize的區(qū)別

final 用于申明屬性,方法和類,表示屬性不可變,方法不可以被覆蓋,類不可以被繼承。
finally 是異常處理語句結構中,表示總是執(zhí)行的部分?! ?br> finallize 表示是object類一個方法,在垃圾回收機制中執(zhí)行的時候會被調(diào)用被回收對象的方法。允許回收此前未回收的內(nèi)存垃圾。所有object都繼承了 finalize()方法

成員內(nèi)部類、靜態(tài)內(nèi)部類、局部內(nèi)部類和匿名內(nèi)部類的理解,以及項目中的應用

一個靜態(tài)內(nèi)部類不需要外部類成員:這是靜態(tài)內(nèi)部類和成員內(nèi)部類的區(qū)別。靜態(tài)內(nèi)部類的對象可以直接生成:
匿名內(nèi)部類也就是沒有名字的內(nèi)部類

匿名內(nèi)部類

正因為沒有名字,所以匿名內(nèi)部類只能使用一次,它通常用來簡化代碼編寫
但使用匿名內(nèi)部類還有個前提條件:必須繼承一個父類或實現(xiàn)一個接口

java-string轉換成integer的方式及原理

http://www.itdecent.cn/p/9eebb4f2ccb1

String的特性

這說明了String的一個重要特性,String 是value不可改變的
然而String類還使用了final來修飾,表明String的第二個重要特性,,它的所有成員變量也都是final的。** String是不可被繼承的**

Hashtable 與 HashMap 的簡單比較

  1. HashTable 基于 Dictionary 類,而 HashMap 是基于 AbstractMap。Dictionary 是任何可將鍵映射到相應值的類的抽象父類,而 AbstractMap 是基于 Map 接口的實現(xiàn),它以最大限度地減少實現(xiàn)此接口所需的工作。
  2. HashMap 的 key 和 value 都允許為 null,而 Hashtable 的 key 和 value 都不允許為 null。HashMap 遇到 key 為 null 的時候,調(diào)用 putForNullKey 方法進行處理,而對 value 沒有處理;Hashtable遇到 null,直接返回 NullPointerException。
  3. Hashtable 方法是同步,而HashMap則不是。我們可以看一下源碼,Hashtable 中的幾乎所有的 public 的方法都是 synchronized 的,而有些方法也是在內(nèi)部通過 synchronized 代碼塊來實現(xiàn)。所以有人一般都建議如果是涉及到多線程同步時采用 HashTable,沒有涉及就采用 HashMap,但是在 Collections 類中存在一個靜態(tài)方法:synchronizedMap(),該方法創(chuàng)建了一個線程安全的 Map 對象,并把它作為一個封裝的對象來返回。

List、Set、Map的區(qū)別

List:
1.可以允許重復的對象。
2.可以插入多個null元素。
3.是一個有序容器,保持了每個元素的插入順序,輸出的順序就是插入的順序。
4.常用的實現(xiàn)類有 ArrayList、LinkedList 和 Vector。ArrayList 最為流行,它提供了使用索引的隨意訪問,而 LinkedList 則對于經(jīng)常需要從 List 中添加或刪除元素的場合更為合適。

Set:
1 不允許重復對象
2 無序容器,你無法保證每個元素的存儲順序,TreeSet通過 Comparator 或者 Comparable 維護了一個排序順序。
3 只允許一個 null 元素

Map:
Map不是collection的子接口或者實現(xiàn)類。Map是一個接口。
Map 的 每個 Entry 都持有兩個對象,也就是一個鍵一個值,Map 可能會持有相同的值對象但鍵對象必須是唯一的。
TreeMap 也通過 Comparator 或者 Comparable 維護了一個排序順序。
Map 里你可以擁有隨意個 null 值但最多只能有一個 null 鍵。

HashSet 的源碼是挺簡單的,內(nèi)部都是用 HashMap 來實現(xiàn)的。利用了 HashMap 的 key 不能重復這個原理來實現(xiàn) HashSet 。

SparseArray兩個數(shù)組mKeys、mValues分別存放int與Object,其默認長度為10,mKeys為有序列表,通過二分查找,找到要插入的key對應的index (這里相對于查找hash表應該算是費時間吧,但節(jié)省了內(nèi)存,所以是 時間換取了空間)
通過二分查找到的index,將Value插入到mValues數(shù)組的對應位置


markdown

ArrayMap和SparseArray有點類似;其中含有兩個數(shù)組,一個是mHashes(key的hash值數(shù)組,為一個有序數(shù)組),另一個數(shù)組存儲的是key和value,其中key和value是成對出現(xiàn)的,key存儲在數(shù)組的偶數(shù)位上,value存儲在數(shù)組的奇數(shù)位上。

集合Set實現(xiàn)Hash怎么防止碰撞

重寫hashcode()和equles()方法

WebSocket與socket的區(qū)別

Socket 是操作系統(tǒng)內(nèi)置的一套操作 TCP/IP 協(xié)議的網(wǎng)絡(套接字)的方法;
Websocket 是跟 HTTP 對應的,基于 TCP 協(xié)議之上的「長連接」協(xié)議。

對安卓簽名的理解
應用可以被不同的簽名文件簽名(如果有源代碼或者反編譯后重新編譯)
同一個應用如果簽名不同則不能覆蓋安裝

Serializable原理

Serializable是Java為我們提供的一個標準化的序

Java原生序列化方式是通過實現(xiàn)Serializable接口實現(xiàn)的. 不實現(xiàn)該接口會導致無法序列化, 拋出異常

將對象轉換為字節(jié)流, 用于網(wǎng)絡傳輸, 例如用于RPC遠程調(diào)用。

將對象保存到磁盤, 例如tomcat的鈍化和活化.

transient關鍵字:這個類的有些屬性需要序列化,而其他屬性不需要被序列化,打個比方,如果一個用戶有一些敏感信息(如密碼,銀行卡號等),為了安全起見,不希望在網(wǎng)絡操作

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

Parcelable原理

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容