java里強制轉換的小疑惑(java里強制轉換的小疑惑是什麼)

本文目錄一覽:

java強制轉換的問題

1.由於a,b是int型而h是float型變量,a/b的結果也就是float型,假如想要進行相互賦值,就必須先把他們統一成同一類型的變量。

2.這裡的“h=(float)a/b”是指:將整形變量a除以整形變量b的結果強制轉化為float型,並將這個值賦給h,並不是申明,申明在前面已經有過了,不需要重複申明。強制轉換都是這個格式而已:變量=(右邊表達式或者變量要轉換成的數據型)變量或者表達式;

3.在這裡float是可以改成double的,由於double的數集包含了float,假如a/b的結果轉換成double型但是仍在float型的範圍內,就可以,假如超過了,就不行。

4.例如,char a=’B’ ;(這個變量a是char型的,值為’B’)

byte c=(byte)a;(我們想把a的值賦給c,但是a為char型的,只好把a的數據型轉化成

與 a一樣的byte型來實現賦值了)、

寫了一大堆,說的不是很清楚,希望能夠幫到你,最好還是自己看看書上的例子,再去問問老師,估計你的收穫會更大!

java的強制類型轉換問題

因為object是一切類的父類,你將子類轉換為父類,由於內存中子類對象的空間內包含父類的一切屬性和方法,那麼當你調用這些屬性和方法的時候一定不會出問題。所以不需要強制轉換。

但如果將父類轉換為子類。這是很可能的。因為如果A有子類B和C。B子類有D。那麼如果創建C對象聲明為A是很正常的。但是如果將這個對象轉換為B。JVM會認為你聲明的與內存中的可能有衝突。那麼這個風險就要由程序員來承擔,這個時候就需要強轉了。其實強轉就是一個風險從JVM轉移到程序員的過程。表名程序員知道並且承擔了這個風險。因為一旦你創建B聲明A。強轉為C。調用C特有的方法時程序是會出錯的。那麼這個風險轉移給了程序員承擔。如果創建D,聲明A。強轉為B虛擬機他是不知道這個其實是沒有風險的,所以也要程序員的承擔。總體來說就是當你需要將父類轉換為子類時需要強轉。

在java中什麼是強制類型轉換!

1 ) 整數 int 轉換成字串 String , 有三種方法 :

String s = String.valueOf(i);

String s = Integer.toString(i);

String s = “” + i;

2 ) String 轉 int

int i = Integer.parseInt([String]);

i = Integer.parseInt([String],[int radix]);

int i = Integer.valueOf(my_str).intValue();

3 ) 布爾類型 轉 String

1. 第一種方法

boolean bool = true;

String s = new Boolean(bool).toString();//將bool利用對象封裝器轉化為對象

2. 第二種方法

boolean bool = true;

String s = String.valueOf( bool );

4 ) String 轉 Date

1 . 導入 java.util.Date date=null;

2 . date=java.sql.Date.valueOf(String s);

5 ) 數字類型間的轉換

轉型有兩種: 向上轉型和向下轉型(強制轉型)

兩種分別如下:

第一種是向上轉型

對於基礎數據類型 , 可以自動轉型 ,比如:

int a = 10;

long b = a;

這裡就是把int型轉成了long型 , 因為 long範圍比int大 , 這樣的轉型不會有任何影響 , 所以可以自動轉型

第二種是向下轉型 , 也就是強制

這種需要強轉 , 比如

long a = 10 ;

int b = (int) a;

通過 (int)可以強制轉型 , 但是這樣會丟失精度 , 比如a如果超過了b的範圍 , 那麼強轉成int型, 只會等於int的最大值

又如 : int a = ( int ) 8.8 ;

如果對編程感興趣可以來我這個看看,希望對您有所幫助!~

Java強制類型轉換的疑惑

我們一般把java類型分為編譯時類型與運行時類型。java程序運行後,對象的類型就不會發生改變。而強制類型轉換隻不過是用某種類型去引用內存中的實體,這種類型只是編譯時類型,與運行後的實體並沒有聯繫

菜鳥弱弱地問一個java強制轉換的小問題?

double i = (int)65 * 0.1;是先把65轉成int型,再*0.1,此時會把65再轉成double型65.0 再*0.1,結果是6.5

double i = (int)65/10,同樣先轉65為整型,再/10,由於10是整數,所以65/10=6,取整,再賦值給double 型變量i,結果是6.0

java中的強制類型轉換

在Java中強制類型轉換分為基本數據類型和引用數據類型兩種,這裡我們討論的後者,也就是引用數據類型的強制類型轉換。

在Java中由於繼承和向上轉型,子類可以非常自然地轉換成父類,但是父類轉換成子類則需要強制轉換。因為子類擁有比父類更多的屬性、更強的功能,所以父類轉換為子類需要強制。那麼,是不是只要是父類轉換為子類就會成功呢?其實不然,他們之間的強制類型轉換是有條件的。

當我們用一個類型的構造器構造出一個對象時,這個對象的類型就已經確定的,也就說它的本質是不會再發生變化了。在Java中我們可以通過繼承、向上轉型的關係使用父類類型來引用它,這個時候我們是使用功能較弱的類型引用功能較強的對象,這是可行的。但是將功能較弱的類型強制轉功能較強的對象時,就不一定可以行了。

舉個例子來說明。比如系統中存在Father、Son兩個對象。首先我們先構造一個Son對象,然後用一個Father類型變量引用它:

Father father = new Son();

在這裡Son 對象實例被向上轉型為father了,但是請注意這個Son對象實例在內存中的本質還是Son類型的,只不過它的能力臨時被消弱了而已,如果我們想變強怎麼辦?將其對象類型還原!

Son son = (Son)father;

這條語句是可行的,其實father引用仍然是Father類型的,只不過是將它的能力加強了,將其加強後轉交給son引用了,Son對象實例在son的變量的引用下,恢復真身,可以使用全部功能了。

前面提到父類強制轉換成子類並不是總是成功,那麼在什麼情況下它會失效呢?當引用類型的真實身份是父類本身的類型時,強制類型轉換就會產生錯誤。例如:

Father father = new Father();

Son son = (Son) father;

這個系統會拋出ClassCastException異常信息。

所以編譯器在編譯時只會檢查類型之間是否存在繼承關係,有則通過;而在運行時就會檢查它的真實類型,是則通過,否則拋出ClassCastException異常。

所以在繼承中,子類可以自動轉型為父類,但是父類強制轉換為子類時只有當引用類型真正的身份為子類時才會強制轉換成功,否則失敗。

擴展資料:

public class TestCastClassException

{

public static void main(String[] args)

{

Father father = new Son();

//這兩句話是不對的,因為一個father類型的引用(指針)是看不見、看不到son中新定義的數據成員或者成員函數的

//雖然這個對象的本質是Son類型的,它也確實有這樣的數據成員和成員函數,但是指針的作用範圍不夠,它看不到。

//代碼後面附上模型分析

//father.son = 2;

//father.show_son();

father.show_father();

father.show();

Father father1 = (Father)father;//一個對象在內存中被new出來後,只能選擇訪問它的方式,不能修改它的布局(包含的成員的個數等)

father1.show();

} //main

}

class Father

{

public int father = 2;

Father(){}

void show()

{

System.out.println(“This is father”);

}

void show_father()

{

System.out.println(“father!!”);

}

}

class Son extends Father

{

public int son = 1;

Son(){}

void show()

{

System.out.println(“This is son”);

}

void show_son()

{

System.out.println(“son!!”);

}

}

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/245391.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-12 13:08
下一篇 2024-12-12 13:08

相關推薦

  • Java JsonPath 效率優化指南

    本篇文章將深入探討Java JsonPath的效率問題,並提供一些優化方案。 一、JsonPath 簡介 JsonPath是一個可用於從JSON數據中獲取信息的庫。它提供了一種DS…

    編程 2025-04-29
  • java client.getacsresponse 編譯報錯解決方法

    java client.getacsresponse 編譯報錯是Java編程過程中常見的錯誤,常見的原因是代碼的語法錯誤、類庫依賴問題和編譯環境的配置問題。下面將從多個方面進行分析…

    編程 2025-04-29
  • Java騰訊雲音視頻對接

    本文旨在從多個方面詳細闡述Java騰訊雲音視頻對接,提供完整的代碼示例。 一、騰訊雲音視頻介紹 騰訊雲音視頻服務(Cloud Tencent Real-Time Communica…

    編程 2025-04-29
  • Java Bean加載過程

    Java Bean加載過程涉及到類加載器、反射機制和Java虛擬機的執行過程。在本文中,將從這三個方面詳細闡述Java Bean加載的過程。 一、類加載器 類加載器是Java虛擬機…

    編程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介紹

    本文將詳細介紹Java Milvus SearchParam withoutFields的相關知識和用法。 一、什麼是Java Milvus SearchParam without…

    編程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java語言中的一個版本,於2014年3月18日發布。本文將從多個方面對Java 8中某一周的周一進行詳細的闡述。 一、數組處理 Java 8新特性之一是Stream…

    編程 2025-04-29
  • Java判斷字符串是否存在多個

    本文將從以下幾個方面詳細闡述如何使用Java判斷一個字符串中是否存在多個指定字符: 一、字符串遍歷 字符串是Java編程中非常重要的一種數據類型。要判斷字符串中是否存在多個指定字符…

    編程 2025-04-29
  • VSCode為什麼無法運行Java

    解答:VSCode無法運行Java是因為默認情況下,VSCode並沒有集成Java運行環境,需要手動添加Java運行環境或安裝相關插件才能實現Java代碼的編寫、調試和運行。 一、…

    編程 2025-04-29
  • Java任務下發回滾系統的設計與實現

    本文將介紹一個Java任務下發回滾系統的設計與實現。該系統可以用於執行複雜的任務,包括可回滾的任務,及時恢復任務失敗前的狀態。系統使用Java語言進行開發,可以支持多種類型的任務。…

    編程 2025-04-29
  • Java 8 Group By 會影響排序嗎?

    是的,Java 8中的Group By會對排序產生影響。本文將從多個方面探討Group By對排序的影響。 一、Group By的概述 Group By是SQL中的一種常見操作,它…

    編程 2025-04-29

發表回復

登錄後才能評論