2013IT鐵人賽-22-Java08-Java轉型練習
首先進入我們的 git 資料夾 /home/max/2013ironman (請按自己的設定調整 git 所在資料夾)
>cd /home/max/2013ironman
將 GitHub 上面的資料同步回來
> git pull origin master
From https://github.com/sakanamax/2013ironman
* branch master -> FETCH_HEAD
Already up-to-date.
這邊就可以觀察到, 如果兩邊都是最新的, 那系統就會顯示 up-to-date.
首先整理下資料型態轉換的相關訊息
資料型態轉換
- 範圍較小轉換為範圍較大的可以, 反之不行
- 如果要將有效範圍較大轉成有效範圍較小的變數,要使用 "型態轉換運算子" 來達成
- 型態轉換運算子 語法為
- (資料型態) 運算式;
- 注意, 轉換型態只針對 值 來轉換型態, 不針對變數本身轉換型態
- 自動資料型態轉換
- 必須是數值
- 只會將佔用空間較小的型態轉成佔用空間較大的型態
- 整數會自動轉成浮點數, 浮點數不會自動轉成整數
那我們就開始練習吧 ^_^
進入到 java 的練習資料夾
> cd /home/max/2013ironman/java/
建立一個 java 原始檔如下
> cat Basic_008_autoCasting.java
// 這個練習, 我們練習java 的自動資料型態轉換
class Basic_008_autoCasting {
public static void main(String[] args){
//宣告一個 inum 變數為整數 integer, 值為160
int inum = 160;
//使用 System.out.println 顯示出來
System.out.println("身高為" + inum + "公分");
//宣告一個 double 變數, 使用 inum 指定過去
double dnum = inum;
//使用 System.out.println 顯示出來
System.out.println("身高為" + dnum + "公分");
//觀察輸出的結果, 會顯示 160.0 公分, 因為double 的佔用空間比較大
//所以使用佔用空間比較小的 int 指定到double 這樣是沒有問題的, 且會自動轉型
}
}
編譯我們剛剛寫的 java 程式
> javac Basic_008_autoCasting.java
執行剛剛的程式
> java Basic_008_autoCasting
身高為160公分
身高為160.0公分
剛剛是把資料型態小的資料指定到資料大的型態, 接下來我們把他反過來
建立一個 java 原始檔如下
> cat Basic_009_forceCasting.java
// 這個練習, 我們練習java 的強制資料型態轉換
class Basic_009_forceCasting {
public static void main(String[] args){
//宣告一個 dnum 變數為double, 值為160
double dnum = 160;
//使用 System.out.println 顯示出來
System.out.println("身高為" + dnum + "公分");
//宣告一個 integer 變數, 使用 dnum 指定過去
int inum = dnum;
//使用 System.out.println 顯示出來
System.out.println("身高為" + inum + "公分");
//這個在編譯的過程就會有問題
//觀察輸出的結果, 因為double 的佔用空間比較大
//所以使用佔用空間比較大的 double 指定到int 這樣有問題的
}
}
接下來嘗試進行編譯的動作
> javac Basic_009_forceCasting.java
Basic_009_forceCasting.java:10: error: possible loss of precision
int inum = dnum;
^
required: int
found: double
1 error
就會看到系統提出錯誤訊息 possible loss of precision 可能會失去精準度
接下來我們修改原來的程式, 並使用強制轉型的方式來進行
> cat Basic_009_forceCasting.java
// 這個練習, 我們練習java 的強制資料型態轉換
class Basic_009_forceCasting {
public static void main(String[] args){
//宣告一個 dnum 變數為double, 值為160
double dnum = 160;
//使用 System.out.println 顯示出來
System.out.println("身高為" + dnum + "公分");
//宣告一個 integer 變數, 使用 dnum 指定過去
//這邊使用強制轉型, 加上 (int) 轉成int資料型態
int inum = (int) dnum;
//使用 System.out.println 顯示出來
System.out.println("身高為" + inum + "公分");
//這個在編譯的過程就會有問題
//觀察輸出的結果, 因為double 的佔用空間比較大
//所以使用佔用空間比較大的 double 指定到int 這樣有問題的
//所以我們會使用強制轉型 (型態) 的方式來解決這個問題
}
}
接下來嘗試進行編譯的動作
> javac Basic_009_forceCasting.java
執行剛剛的程式
> java Basic_009_forceCasting
身高為160.0公分
身高為160公分
在進行轉型的時候, 還是要注意到一些相關細節的, 不管是相同型態還是不同型態.
所以接下來我們再來練習另外一個例子.
建立一個 java 原始檔如下
> cat Basic_010_noticeCasting.java
//這個範例我們來觀察如果進行轉型要注意的小地方
class Basic_010_noticeCasting {
public static void main(String[] args){
//宣告兩個 int 變數, 並指定值
int num1 = 5;
int num2 = 4;
System.out.println("num1= " + num1);
System.out.println("num2= " + num2);
//宣告一個double 變數 div
double div = num1 / num2;
//顯示 div 輸出的結果, 但是由於 num1,num2 是整數, 所以輸出的值,
//不是我們期待中的1.25 而是整數所能輸出的1 然後再指定給div
System.out.println("double div is num1 / num2= "+ div);
//宣告一個double 變數 div2, 並於 num1 以及 num2 前進行強制轉型
double div2 = (double) num1 / (double) num2;
//觀察輸出的結果
System.out.println("double div2 is (double) num1 / (double) num2= " + div2);
}
}
接下來嘗試進行編譯的動作
> javac Basic_010_noticeCasting.java
執行剛剛的程式
> java Basic_010_noticeCasting
num1= 5
num2= 4
double div is num1 / num2= 1.0
double div2 is (double) num1 / (double) num2= 1.25
準備將相關檔案傳送到 GitHub 上面
> cd /home/max/2013ironman/
> git add java/*
> git commit -m "Add java Casting files"
[master 987b9df] Add java Casting files
6 files changed, 54 insertions(+)
create mode 100644 java/Basic_008_autoCasting.class
create mode 100644 java/Basic_008_autoCasting.java
create mode 100644 java/Basic_009_forceCasting.class
create mode 100644 java/Basic_009_forceCasting.java
create mode 100644 java/Basic_010_noticeCasting.class
create mode 100644 java/Basic_010_noticeCasting.java
> git push origin master
Username for 'https://github.com': 您的帳號
Password for 'https://sakanamax@github.com': 您的密碼
Counting objects: 11, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (9/9), done.
Writing objects: 100% (9/9), 3.14 KiB, done.
Total 9 (delta 2), reused 0 (delta 0)
To https://github.com/sakanamax/2013ironman.git
eb1990c..987b9df master -> master
完成今天 java 轉型的練習
Fun with Day 22 ~
沒有留言:
張貼留言