日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

java 怎么输出地址,Java中char[]输出不是内存地址的原因详解

發布時間:2024/9/30 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 怎么输出地址,Java中char[]输出不是内存地址的原因详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

Java中共有八種基本數據類型:byte,int,short,long,float,double,char,boolean。

計算機中的基礎數據單位是bit, 1byte=8bit。

數據類型

存儲大小

舉例

注釋

包裝類

byte

1byte

3

字節

Byte

int

4byte

4

整數

Integer

short

2bytes

5

短整數

Short

long

8bytes

6

長整數

Long

float

4bytes

1.3

單精度浮點型

Float

double

8bytes

1.2

雙精度浮點型

Double

char

2bytes

‘a'

字符

Char

boolean

1bit

true

布爾值

Boolean

這8種基本數據類型很簡單,在示例中應用來看一下:

?

一段簡單的輸出代碼,看看打印結果:

?

可以看到輸出結果是沒有問題的。

基本數據類型和對象引用

基本數據類型會一直在棧中創建,當聲明基本類型時,不需要new。

?

棧的讀取速度比堆快。基本類型一旦被聲明,java將在棧上直接存儲它,所以基本類型的變量表示的是數據本身。

假如調用基本類型的包裝類來創建對象,那么將會在堆中創建。

?

等號右側的new Double() 。這個new是在內存的堆中為對象開辟控件,保存對象的數據和方法。

等號左側 Double a。a指代的是Double的一個對象,稱為對象引用,這個對象引用是在棧中創建的。實際上a不是對象本身,它用來指向一個地址。

賦值=。這個就是把對象的地址賦給a。

此時輸出a就是一個內存地址。有興趣的同學自己試一試。

這個地方說明一個問題,假如你自定義的對象重寫了.toString方法,此處就會顯示你的自定義的重寫方法的輸出值。

在java的基本類型包裝類中就重寫了這個方法,所以調用print方法時會自動調用它的toString()方法。

?

在上邊的例子中Employee的toString()方法沒有被重寫,Employer的toString()方法被重寫了。

來看輸出結果:

?

前者仍然是內存地址,后者是我們重寫的方法。

print方法在調用事,假如類中的toString()方法沒有被重寫,則會電泳String.valueof()方法(后邊有講),假如重寫了就會調用toString方法。

所有的包裝類(Integer,Boolean等)都已經重寫了toString方法,所以不會輸出內存地址,而是輸出正確的值。

下面的是Double類中的方法:

?

整形數據類型取值范圍

byte占據8位,則其取值范圍應該是2的8次方,也就是-128~127,超過這個區間就會報錯,例如:

?

在編譯器中會報錯,提示不能將int轉換為byte,因為128已經超出byte的范圍了。

同樣可以推得其他值的取值范圍。

基本類型的數組輸出值

?

看一下打印的結果:

?

可以看到,在結果中,所有的基本類型都可以打印出來,數組類型只能打印出char數組,其他的都是內存地址。

來看一下源碼,在print函數中

?

這個char被轉換為了String類型,然后進行wirte方法:

?

這里會立即發送緩沖流輸出。

對于所有的基礎類型都會打印出具體的值,這個沒有問題,但是對于數組為什么只有char的數組類型打印出了正確的結果而沒有輸出內存地址?

帶著這個問題我們來了解一下:

對于int型數組,java調用的是下面的方法:

?

此處數組被認為是Object類型,調用的是

?

此處的三目表達式用來判空,然后看一下obj.toString()方法:

?

相信看到此處應該可以看出來為什么輸出會是[I@1b6d3586了,I代表的類的名稱。

那么對于char數組類型的調用呢,次數室友玄機的:

?

此處調用的是println(char x[])這個函數,那么這個char x[]是個什么鬼呢?

其實就是java中的數組初始化,相當于char[] x。

然后看看print(x)函數:

?

最后是write()函數:

?

到了這大家知道為什么會有區別了么,因為其他類型的數組都被認為是Object類型了,所以會輸出內存地址。而char[]調用的方法是輸出char這個數組中的每一個值,所以不是內存地址了。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對服務器之家的支持。

總結

以上是生活随笔為你收集整理的java 怎么输出地址,Java中char[]输出不是内存地址的原因详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。