成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

基本類型的類型轉(zhuǎn)換(隱式類型轉(zhuǎn)換)和強(qiáng)制類型轉(zhuǎn)換(譯一)

pcChao / 3263人閱讀

摘要:基本類型的類型轉(zhuǎn)換和強(qiáng)制類型轉(zhuǎn)換一的變量類型分為種。目錄基本類型的類型轉(zhuǎn)換隱式類型轉(zhuǎn)換基本類型的強(qiáng)制類型轉(zhuǎn)換基本類型的類型轉(zhuǎn)換隱式類型轉(zhuǎn)換基本類型的類型轉(zhuǎn)換是通過(guò)擴(kuò)展轉(zhuǎn)換的規(guī)則完成的。

基本類型的類型轉(zhuǎn)換和強(qiáng)制類型轉(zhuǎn)換(一)

Java的變量類型分為2種?;绢愋停ㄔ碱愋停┖鸵妙愋?。基本類型包括以下八種類型:boolean、 char、byte、short、int、long、float、double。引用類型包括一下三種類型,類(class)類型、接口(interface)類型、數(shù)組(Array)類型。

本章主要講述基本類型之間轉(zhuǎn)換的方法,轉(zhuǎn)換包括由Java運(yùn)行時(shí)環(huán)境隱式執(zhí)行的類型轉(zhuǎn)換和根據(jù)程序需要進(jìn)行的強(qiáng)制類型轉(zhuǎn)換。另外,關(guān)于引用類型的轉(zhuǎn)換,請(qǐng)參照Class(引用類型的轉(zhuǎn)換和強(qiáng)制類型轉(zhuǎn)換)。

目錄

基本類型的類型轉(zhuǎn)換(隱式類型轉(zhuǎn)換)

基本類型的強(qiáng)制類型轉(zhuǎn)換

基本類型的類型轉(zhuǎn)換(隱式類型轉(zhuǎn)換)

基本類型的類型轉(zhuǎn)換是通過(guò)擴(kuò)展轉(zhuǎn)換的規(guī)則完成的。當(dāng)Java運(yùn)行時(shí)環(huán)境將數(shù)據(jù)的存儲(chǔ)范圍向更寬的類型轉(zhuǎn)換的時(shí),執(zhí)行隱式類型轉(zhuǎn)換。

類型轉(zhuǎn)換規(guī)則
待轉(zhuǎn)換的基本類型 可能的轉(zhuǎn)換目標(biāo)的基本類型
boolean 沒(méi)有
char int, long, float, double
byte short, int, long, float, double
short int, long, float, double
int long, float, double
long float, double
float double
double 沒(méi)有

以下將會(huì)說(shuō)明Java運(yùn)行時(shí)環(huán)境何時(shí)會(huì)進(jìn)行隱式類型轉(zhuǎn)換。

在賦值時(shí)進(jìn)行類型轉(zhuǎn)換

某個(gè)基本類型的變量,在賦值給其他基本類型的變量時(shí),將會(huì)進(jìn)行隱式的類型轉(zhuǎn)換。轉(zhuǎn)換遵循[類型轉(zhuǎn)換規(guī)則]。

int x = 10;
double y;
y = x;
//變量x(int類型)賦值給變量y(double類型)時(shí),將會(huì)執(zhí)行隱式類型轉(zhuǎn)換。int類型的變量轉(zhuǎn)換為double類型之后,會(huì)執(zhí)行賦值操作。因?yàn)樗前凑誟類型轉(zhuǎn)換的規(guī)則]進(jìn)行的,所以不需要程序員主動(dòng)的進(jìn)行轉(zhuǎn)換。

int x = 10;
short y;
y = x;
//變量x(int類型)無(wú)法賦值給變量y(short類型)。因?yàn)閕nt類型的變量x無(wú)法轉(zhuǎn)換成shot類型的變量,short類型的存儲(chǔ)范圍小于int類型。執(zhí)行的結(jié)果會(huì)出現(xiàn)編譯錯(cuò)誤。
在調(diào)用方法時(shí)的類型轉(zhuǎn)換

在調(diào)用方法時(shí),如果指定的類型與您要調(diào)用的方法的參數(shù)類型所需的類型不同,則會(huì)執(zhí)行隱式類型轉(zhuǎn)換。 在這種情況下,類型轉(zhuǎn)換也遵循【類型轉(zhuǎn)換規(guī)則】

short x = 10;
System.out.println(Integer.toString(x));

Integer.toString是一種將int類型數(shù)據(jù)轉(zhuǎn)換為字符串的方法,該方法需要一個(gè)int類型的參數(shù)。 在如上所示代碼,形參的類型為short類型的情況下 根據(jù)【類型轉(zhuǎn)換規(guī)則】,short類型被轉(zhuǎn)換為int類型之后,然后方法被執(zhí)行,所以不會(huì)出現(xiàn)編譯錯(cuò)誤。

double y = 20.25;
System.out.println(Integer.toString(y));

double類型的變量被指定為參數(shù)時(shí)
由于不符合【類型轉(zhuǎn)換規(guī)則】(double類型不能轉(zhuǎn)換為int類型),執(zhí)行結(jié)果為編譯錯(cuò)誤。

算術(shù)運(yùn)算時(shí)候的類型轉(zhuǎn)換

當(dāng)使用算術(shù)運(yùn)算符執(zhí)行算術(shù)運(yùn)算時(shí),將執(zhí)行隱式類型轉(zhuǎn)換。 算術(shù)運(yùn)算中的類型轉(zhuǎn)換規(guī)則如下。

【算術(shù)運(yùn)算符類型變換規(guī)則】

算術(shù)運(yùn)算符 規(guī)則
單項(xiàng)運(yùn)算符
(+, -, ~)
1. char, byte, short類型的變量會(huì)轉(zhuǎn)化成int類型。
2. 除此之外不會(huì)進(jìn)行轉(zhuǎn)換。
二項(xiàng)運(yùn)算符
(+, -, *, /, %, >>, >>>, <<, &, ^, 、豎線)
1. 其中一個(gè)變量為double類型的時(shí)候,另一個(gè)變量也會(huì)轉(zhuǎn)換為double型。
2. 不含有double類型的變量的時(shí)候,其中一個(gè)變量為float類型,那么另一個(gè)變量也會(huì)變成float類型。
3. 不含有double、float類型的時(shí)候,其中一個(gè)變量為long類型,那么另一個(gè)變量也會(huì)變成long類型。
4. 不含有double、float、long類型的時(shí)候,其中一個(gè)變量為int類型,那么另一個(gè)變量也會(huì)變成int類型。

【例1】算術(shù)運(yùn)算時(shí)進(jìn)行轉(zhuǎn)換的正確例子。

short x = 10;
double y = 20.25;
double z = -x + y;  //(1)
System.out.println(z);  //(2)

解釋1

(1)變量x(short)類型,根據(jù)單項(xiàng)運(yùn)算符(-)會(huì)轉(zhuǎn)換為int類型。變量x(int類型)和變量y(double類型),根據(jù)二項(xiàng)運(yùn)算符(+)會(huì)轉(zhuǎn)換為double類型。然后賦值給變量z。

(2)運(yùn)算結(jié)果10.25。

【例2】算術(shù)運(yùn)算時(shí)進(jìn)行轉(zhuǎn)換編譯錯(cuò)誤的例子

short x = 10;
double y = 20.25;
int z = -x + y;  //(1)
System.out.println(z);

解釋2

(1)變量x(short)類型,根據(jù)單項(xiàng)運(yùn)算符(-)會(huì)轉(zhuǎn)換為int類型。變量x(int類型)和變量y(double類型),根據(jù)二項(xiàng)運(yùn)算符(+)會(huì)轉(zhuǎn)換為double類型。。double類型的的運(yùn)算結(jié)果無(wú)法賦值給z變量,編譯錯(cuò)誤。

一些解釋說(shuō)明(非原文)

也許有的讀者會(huì)問(wèn),如何證明變量-x是int類型,苦于譯者的水平,想不到如何用代碼來(lái)證明,但是通過(guò):

javap -c [class文件名]//java反匯編命令

也許可以一探究竟。

示例代碼
public class HelloWorld {
    public static void main(String[] args) {
        short x = 10;
        double y = 20.25;
        double z = -x + y;
    }
}

使用javac命令編譯后,運(yùn)行javap -c命令進(jìn)行反編譯,編譯結(jié)果如下

Compiled from "HelloWorld.java"
public class HelloWorld {
  public HelloWorld();
    Code:
       0: aload_0
       1: invokespecial #1                  // Method java/lang/Object."":()V
       4: return

  public static void main(java.lang.String[]);
    Code:
       0: bipush        10
       2: istore_1
       3: ldc2_w        #2                  // double 20.25d
       6: dstore_2
       7: iload_1
       8: ineg
       9: i2d
      10: dload_2
      11: dadd
      12: dstore        4
      14: return
}

第0行:使用bipush將10推入棧頂時(shí),會(huì)被擴(kuò)展為32bit int類型的值。
第3行:使用ldc2_將將long或double型常量值從常量池中推送至棧頂(寬索引),這里常量是10
第7行:使用iload_1將第2個(gè)int類型的局部變量入棧,也就是10。
第8行:使用ineg將棧頂int型數(shù)值取負(fù),并且結(jié)果進(jìn)棧。
第9行:使用i2d將棧頂int值強(qiáng)轉(zhuǎn)double值,并且結(jié)果進(jìn)棧。
第10行:使用dload_2將第3個(gè)double類型的局部變量入棧,也就是20.25d。
第11行:使用dadd將棧頂兩double型數(shù)值相加,并且結(jié)果進(jìn)棧。
第12行:使用dstore將棧頂double類型的值存入指定的局部變量。

_(:з」∠)_,好像解釋的并不怎么好。要是有好的辦法,希望能告訴我,大家一起學(xué)習(xí)。謝謝。

---未完待續(xù)---

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/68506.html

相關(guān)文章

  • 基本類型類型轉(zhuǎn)換隱式類型轉(zhuǎn)換強(qiáng)制類型轉(zhuǎn)換(譯二)

    摘要:基本類型的類型轉(zhuǎn)換隱式類型轉(zhuǎn)換和強(qiáng)制類型轉(zhuǎn)換基本類型的強(qiáng)制轉(zhuǎn)換所謂強(qiáng)制類型轉(zhuǎn)換是根據(jù)程序員的意志來(lái)進(jìn)行類型變換的處理。將變量轉(zhuǎn)換為存儲(chǔ)領(lǐng)域強(qiáng)制轉(zhuǎn)換為更窄的場(chǎng)合,待變換的數(shù)據(jù)可能發(fā)生溢出。強(qiáng)制轉(zhuǎn)換數(shù)據(jù)溢出運(yùn)行結(jié)果更新日 基本類型的類型轉(zhuǎn)換(隱式類型轉(zhuǎn)換)和強(qiáng)制類型轉(zhuǎn)換 基本類型的強(qiáng)制轉(zhuǎn)換 所謂強(qiáng)制類型轉(zhuǎn)換(CAST)是根據(jù)程序員的意志來(lái)進(jìn)行類型變換的處理。如果隱式類型轉(zhuǎn)化無(wú)法進(jìn)行的場(chǎng)合,...

    BDEEFE 評(píng)論0 收藏0
  • JavaScript基礎(chǔ)---強(qiáng)制類型轉(zhuǎn)換

    摘要:如果有并且返回基本類型值,再使用該值進(jìn)行強(qiáng)制類型轉(zhuǎn)換。四寬松相等和嚴(yán)格相等允許在相等比較中進(jìn)行強(qiáng)制類型轉(zhuǎn)換,而不允許。這時(shí)最好用來(lái)避免不經(jīng)意的強(qiáng)制類型轉(zhuǎn)換。這兩個(gè)原則可以讓我們避開(kāi)幾乎所有強(qiáng)制類型轉(zhuǎn)換的坑。 一、類型轉(zhuǎn)換規(guī)則 1.ToString 對(duì)于普通對(duì)象來(lái)說(shuō),除非自行定義toString方法,否則就會(huì)調(diào)用Object.prototype.toString()方法,如果對(duì)象有自己的...

    lufficc 評(píng)論0 收藏0
  • JavaScript 強(qiáng)制類型轉(zhuǎn)換

    摘要:強(qiáng)制類型轉(zhuǎn)換作為程序員,你一定獲取過(guò)當(dāng)前系統(tǒng)的時(shí)間戳。比如對(duì)于變量而言,此次強(qiáng)制類型轉(zhuǎn)換是隱式的。然而則是非常典型的顯式強(qiáng)制類型轉(zhuǎn)換。隱式強(qiáng)制類型轉(zhuǎn)換大部分被詬病的強(qiáng)制類型轉(zhuǎn)換都是隱式強(qiáng)制類型轉(zhuǎn)換。 JavaScript 強(qiáng)制類型轉(zhuǎn)換 作為 JavaScript 程序員,你一定獲取過(guò)當(dāng)前系統(tǒng)的時(shí)間戳。在 ES5 引入 Date.now() 靜態(tài)方法之前,下面這段代碼你一定不會(huì)陌生: v...

    OnlyLing 評(píng)論0 收藏0
  • JavaScript數(shù)據(jù)類型及(隱式)類型轉(zhuǎn)換詳解

    摘要:顯示的調(diào)用轉(zhuǎn)換過(guò)程稱為顯式強(qiáng)制類型轉(zhuǎn)換,隱式的情況稱為隱式強(qiáng)制類型轉(zhuǎn)換。隱式強(qiáng)制類型轉(zhuǎn)換讓代碼變得晦澀難懂而又便捷而奇妙。事實(shí)上,允許在比較中進(jìn)行強(qiáng)制類型轉(zhuǎn)換,而不允許。如果有并且返回基本類型值,就使用該值進(jìn)行強(qiáng)制類型轉(zhuǎn)換。 JavaScript是一種非常靈活的現(xiàn)代編程語(yǔ)言,靈活到使用者極其容易被忽視的它那廣闊的世界以及它帶給我們的無(wú)限遐想空間。本文將對(duì)JavaScript最最基礎(chǔ)也最...

    hiyayiji 評(píng)論0 收藏0
  • 重學(xué)JS: 隱式強(qiáng)制類型轉(zhuǎn)換

    摘要:隱式強(qiáng)制類型轉(zhuǎn)換指的是那些隱藏的強(qiáng)制類型轉(zhuǎn)換,副作用也不是很明顯,事實(shí)上,只要自己覺(jué)得不夠明顯的強(qiáng)制類型轉(zhuǎn)換都可以算作隱式強(qiáng)制類型轉(zhuǎn)換,接下來(lái),此文將會(huì)介紹幾種常見(jiàn)的隱式類型轉(zhuǎn)換。 隱式強(qiáng)制類型轉(zhuǎn)換指的是那些隱藏的強(qiáng)制類型轉(zhuǎn)換,副作用也不是很明顯,事實(shí)上,只要自己覺(jué)得不夠明顯的強(qiáng)制類型轉(zhuǎn)換都可以算作隱式強(qiáng)制類型轉(zhuǎn)換,接下來(lái),此文將會(huì)介紹幾種常見(jiàn)的隱式類型轉(zhuǎn)換。 加法操作符 轉(zhuǎn)換規(guī)則: ...

    Fourierr 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<