本文目錄一覽:
- 1、java強制轉換的問題
- 2、java的強制類型轉換問題
- 3、在java中什麼是強制類型轉換!
- 4、Java強制類型轉換的疑惑
- 5、菜鳥弱弱地問一個java強制轉換的小問題?
- 6、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-hk/n/245391.html