Type Conversions

21 August 2016

ในบทนี้ คุณจะได้เรียนรู้เกี่ยวกับการแปลงข้อมูลในภาษา Java เพื่อที่จะแปลงข้อมูลจากประเภทหนึ่งไปยังอีกประเภทหนึ่ง เพื่อนำไปใช้ในสถานการณ์ต่างๆ ในการเขียนโปรแกรม เช่น การแปลงข้อมูลจากตัวเลขเป็น String หรือแปลงข้อมูลจาก String เป็นตัวเลข

ในการเขียนโปรแกรม มีข้อมูลประเภทต่างๆ ที่เราต้องจัดการ ข้อมูลแต่ละแบบนั้นสำหรับภาษา Java ต้องเก็บไว้ในตัวแปรประเภทของมันเท่านั้น เช่น ตัวเลขจำนวนเต็ม จะเก็บในตัวแปรประเภท short int หรือ long ตัวเลขทศนิยมเก็บใน float หรือ double และข้อความหรือ string เก็บในตัวแปรประเภท String โดยการแปลงข้อมูลในภาษา Java มีดังนี้

Type Casting

วิธีแรกคือการใช้วิธี type casting โดยมีรูปแบบดังนี้

newType variableName = (newType) valueToCovert;

newType ประเภทข้อมูลที่ต้องการแปลงไปยัง โดยจะต้องเป็นประเภทข้อมูลแบบ primitive date type เท่านั้น คือ char short int float double ยกเว้น boolean valueToCovert เป็นข้อมูลประเภทเดิมที่ต้องการแปลงไปยังประเภทใหม่ โดยสามารถเป็นได้ทั้งตัวแปรและ literals

public class TypeConversions {
    public static void main (String[] args) {
        float f = 5.0f;
        long newF = (long) f;
        System.out.println("Cast float to long = " + newF);

        System.out.println("Cast double to int = " + (int) 123.345);

        System.out.println("Cast int to float = " + (float) 100);

        float n1 = 10.12f;
        System.out.println("n1 is float = " + n1);
        System.out.println("Cast double to float = " + (double) n1);

        double n2 = 10.12;
        System.out.println("n2 is double = " + n1);
        System.out.println("Cast float to double = " + (float) n2);   
    }
}

ในตัวอย่างด้านบนเป็นการแปลงข้อมูลประเภทต่างๆ (เรามักจะใช้คำว่า Casting แทนสำหรับวิธีนี้) เราได้แปลงตัวเลขอีกประเภทหนึ่งไปเป็นอีกประเภทหนึ่ง โดยวิธีการ Type Casting

Cast float to long = 5
Cast double to int = 123
Cast int to float = 100.0
n1 is float = 10.12
Cast double to float = 10.119999885559082
n2 is double = 10.12
Cast float to double = 10.12

จากตัวอย่างด้านบนเป็นตัวอย่างการแปลงข้อมูลโดยใช้วิธี Type Casting

Warning: การแปลงข้อมูลที่มีขนาดใหญ่กว่าไปยังข้อมูลที่เล็กกว่า อาจจะทำให้เกิดความผิดพลาดซึ่งเราเรียกว่า data loss หรือ precision loss เช่นการแปลงจาก long ไปเป็น int หรือจาก double ไปเป็น float เป็นต้น

การแปลงข้อมูลโดยใช้เมธอดของคลาส

แปลงข้อมูลด้วยคลาสของ Primitive data types

ในภาษา Java คลาสของ primitive data type นั้นจะมีทั้งหมด 8 คลาสดังนี้ เหมือนที่เราได้พูดไปในบทของตัวแปรและประเภทข้อมูล

Class NameType
Bytebyte
Shortshort
Integerint
Longlong
Floatfloat
Doubledouble
Characterchar
Booleanboolean

โดยในแต่ละคลาสจะมีเมธอดในการทำงานที่แตกต่างกันออกไป โดยส่วนมากแล้วเมธอดเหล่านี้จะใช้กับข้อมูลทีเป็น string เป็นส่วนใหญ่ ข้างล่างนี้เป็นตัวอย่างส่วนอย่างในการใช้เมธอดในคลาสต่างๆ ในการแปลงข้อมูล

public class PrimitiveTypeClass {
    public static void main (String[] args) {     
        // Convert from string
        System.out.println("Covert string to int = " + Integer.parseInt("15"));
        System.out.println("Covert string to short = " + Short.parseShort("15"));
        System.out.println("Covert string to long = " + Long.parseLong("15"));

        System.out.println("Covert string to float = " + Float.parseFloat("11.54f"));
        System.out.println("Covert string to double = " + Double.parseDouble("11.54"));

        // Convert to string 
        System.out.println("Covert int to string = " + Integer.toString(10));
        System.out.println("Covert int to base 16 = " + Integer.toHexString(10));
        System.out.println("Covert int to base 8 = " + Integer.toOctalString(10));
        System.out.println("Covert int to base 2 = " + Integer.toBinaryString(10));  
    }
}

ในตัวอย่างการแปลงข้อมูลโดยใช้คลาสจะแบ่งออกเป็นสองแบบหลักๆ คือ การแปลงตัวเลขเป็น String และในทางกลับกัน การแปลง String เป็นตัวเลข

เราได้ทำการแปลงข้อมูลโดยใช้เมธอดจากคลาสต่างๆ คุณจะเห็นว่าบางอย่างใช้เมธอดที่แตกต่างกัน เช่น แปลงข้อมูลแบบ String ไปเป็น Integer จะใช้เมธอด Integer.parseInt ในขณะที่แปลงไป Short จะใช้ Short.parseShort และนอกจากนี้ยังแปลงไปเป็นเลขฐานอื่นในรูปแบบ String ได้ เช่น ฐาน 16 ฐาน 8 และฐาน 2

Warning: ในการใส่ค่าของ String เข้าไปยังเมธอด parseInt หรือ parse... รูปแบบของข้อมูลต้องถูกต้องตาม Literals ของข้อมูลแบบตัวเลข

Covert string to int = 15
Covert string to short = 15
Covert string to long = 15
Covert string to float = 11.54
Covert string to double = 11.54
Covert int to string = 10
Covert int to base 16 = a
Covert int to base 8 = 12
Covert int to base 2 = 1010

และนี่เป็นผลลัพธ์ของการแปลงข้อมูลด้วยวิธี Type Casting ในภาษา Java

จากตัวอย่างด้านบนเป็นแค่เมธอดส่วนหนึ่งเท่านั้น ซึ่งยังมีเมธอดอีกมากมายที่คุณสามารถไปลองใช้ได้ เราแนะนำให้คุณศึกษาจาก Auto Suggestion จาก IDE เพราะมันมีคำอธิบายให้ด้วย

Code Completion in Netbean

ตัวอย่าง Code Completion จากโปรแกรม Netbean

จากรูปเป็นการใช้ประโยชน์จาก IDE เราเรียกว่า Code Completion (ขึ้นกับโปรแกรม) แน่นอนว่าคุณสามารถนำเคล็ดลับนี้ไปใช้ได้กับทั้งออบเจ็คที่คุณสร้างขึ้นเอง

แปลงข้อมูลด้วยคลาส String

คลาส String ใช้สำหรับแปลงข้อมูลประเภทต่างๆ เป็น String นี่เป็นตัวอย่างการแปลงข้อมูลเป็น String เช่น แปลงตัวเลขให้เป็น String หรือมีคลาสจัดการเกี่ยวกับ String ซึ่งอยู่ในบทของ String

public class StringTypeClass {
    public static void main (String[] args) {     
        System.out.println("Covert boolean to string " + String.valueOf(true));
        System.out.println("Covert int to string " + String.valueOf(12));
        System.out.println("Covert float to string " + String.valueOf(50.4f));
        System.out.println("Covert double to string " + String.valueOf(98.321));
    }
}

จากโค้ดนั้นเป็นการใช้เมธอด String.valueOf ซึ่งมันเป็นเมธอดแบบ Overloading Method ที่สามารถรองรับข้อมูลได้ทุกประเภทเป็นอากิวเมนต์

Covert boolean to string true
Covert int to string 12
Covert float to string 50.4
Covert double to string 98.321

และนี่เป็นผลลัพธ์จากการแปลงข้อมูลค่าของ Boolean และตัวเลขเป็น String ในภาษา Java

ในบทนี้ คุณได้เรียนรู้เกี่ยวกับการแปลงประเภทข้อมูลในภาษา Java เพื่อที่จะใช้จัดการกับข้อมูลที่ต่างประเภทกัน โดยเฉพาะการแปลงจากตัวเลขเป็น String และแปลงจาก String เป็นตัวเลข โดยใช้เมธอดจากคลาสต่างๆ นอกจากนี้คุณยังทราบว่าการแปลงข้อมูลที่มีขนาดใหญ่กว่าไปยังข้อมูลที่มีขนาดเล็กกว่าอาจจะทำให้เกิดความผิดพลาดของข้อมูลได้

บทความนี้เป็นประโยชน์หรือไม่?Yes·No