欧美日韩国产一区,亚洲一区视频,色综合久久久久,私密按摩师舌头伸进去了,99re6这里只有精品,夜夜性日日交xxx性hd

8.數據基本類型的轉換

  • • 發表于 8年前
  • • 作者 大妖怪
  • • 4260 人瀏覽
  • • 6 條評論
  • • 最后編輯時間 7年前
  • • 來自 [技 術]

原創聲明:本文為作者原創,未經允許不得轉載,經授權轉載需注明作者和出處

在數據類型那章我們學習了java的八大基本類型,我們發現。除了boolean類型,其它的幾種類型都是數(char類型也可以看成是數)。那么既然都是數,那么他們之間能不能相互轉換呢?
基本類型之間的轉換我們分為以下幾種情況

  • 小范圍向大范圍轉換
  • 大范圍向小范圍轉換
  • 低精度向高精度轉換
  • 高精度向低精度轉換
  • 基本類型向字符串轉換
  • 基本類型向類類型轉換
  • 類類型向字符串轉換

由于目前所學知識的限制,我們今天只講去前五種情況。
首先,我們來看看第一種情況:小范圍向大范圍轉換
這里的小范圍和大范圍指的是數據的范圍,都是相對的概念,比如int相對于Long就是小范圍,相對于byte就是大范圍。
現在,我們有一個int類型的變量a,給它 賦值為10,然后我們再申明個long類型的變量b,然后我們把a賦值給b,我們輸出一下b的值,這就是第一種情況,小范圍向大范圍轉換:

int a = 1;
long b = a;
System.out.println(b);

你會發現這跟普通的賦值好像沒有什么區別。這是因為long類型的范圍本來就比int大,jvm虛擬機自動就處理了(神奇的jvm),就好比把小盒子里的東西放到大盒子,直接倒進去就行了。
如果我們反過來試一下,會發現:

a處報了錯,說明編譯沒通過,鼠標放在a上,立馬顯示了錯誤提示

Type mismatch: cannot convert from long to int

意思是不能將long類型轉換為int類型,并且給出了三個解決方案,我們點一下“add cast to int這個”,這個方案是講a強轉成int(另外兩種大家可以自己試一試),于是代碼變成了:

long a = 1l;
int b =  (int) a;
System.out.println(b);

沒錯,在變量前面加上(int)就完成了強轉。
但是,我們前面提到long范圍比int類型的大,還用盒子做了比喻,有的童鞋可能會問:如果大盒子里的東西超出小盒子儲存的范圍會怎樣?比如我a的值一開始就弄個10000000000l,我們來看代碼:

long a = 10000000000l;
int b =  (int) a;
System.out.println(b);

運行的結果卻是1410065408,當然,再多加幾個0可能還會變成負數,這結果顯然不對啊。這是因為long存放的東西超出了int能接受的范圍,導致內存溢出了,具體的原理需要講到底層二進制代碼,有興趣的童鞋可以自己去查查資料。
由以上兩條可以總結出:

  • 范圍小的數轉范圍大的數可以直接轉換
  • 范圍大的數轉范圍小的數需要強轉,如果范圍大的數的值超出的范圍小的數的值,則會導致內存溢出
    接下來我們看看低精度向高精度轉換:
    float a = 1.23f;
    double b = a;
    System.out.println(b);
    
    我們的運行結果是1.2300000190734863,我們的1.23可以看成是這個數四舍五入之后保留兩位小數之后留下來的,這就說明,這個數的精確度比1.23高,所以結果是對的。
    那么反過來呢,你會發現和long轉int一樣,也需要強轉:
    double a = 1.23d;
    float b = (float) a;
    System.out.println(b);
    
    結果自然毫無疑問是1.23,那么其實我們的高低精度轉換也可以看成是大小盒子的問題,那么會和long轉int一樣出現內存問題么,比如:
    double a = 1.255555555555555d;
    float b = (float) a;
    System.out.println(b);
    
    可以根據我們的運行結果“1.2555555”看出,并不會出現這個問題,后面的位數數被我們神奇的jvm虛擬機自動去掉了。
    由以上兩條我們可以總結出:
  • 低精度的數轉高精度的數可以直接轉換,轉換的結果比低精度的數經度高
  • 高精度的數轉低精度的數需要強轉,如果高精度的數超過了低精度數的經度會保留高精度數在低精度中的最大位數

當然,我們的int,long byte等等可以看成是精度為0的小數,因此也符合這個以上兩條規則
還記得在講字符串的時候,我們講過這樣一個例子:

int a = 1;
int b = 2;
System.out.println(""+a+b);

當時講過這個輸出的結果為什么么是12而不是3,原因是當前面拼接上了字符串之后,后面的會自動被強轉為字符串拼接起來,那么基本類型向字符串轉換這個情況的規律就是:

  • 基本類型需要轉成字符串時,在基本類型的前面拼接一個字符串即可。

那么為什么是在前面拼接不能在后面拼接呢?我們可以運行下面代碼做個試驗:

int a = 1;
int b = 2;
System.out.println(a+b+""+a+b);

相信看到結果“312”的你應該懂了吧。

分享到:
6條評論
Ctrl+Enter
作者

大妖怪

大妖怪

APP:1 帖子:76 回復:200 積分:7517

已加入社區[3161]天

夢里巷口,可有你倚門回首

作者詳情》
Top