Customize Consent Preferences

We use cookies to help you navigate efficiently and perform certain functions. You will find detailed information about all cookies under each consent category below.

The cookies that are categorized as "Necessary" are stored on your browser as they are essential for enabling the basic functionalities of the site. ... 

Always Active

Necessary cookies are required to enable the basic features of this site, such as providing secure log-in or adjusting your consent preferences. These cookies do not store any personally identifiable data.

No cookies to display.

Functional cookies help perform certain functionalities like sharing the content of the website on social media platforms, collecting feedback, and other third-party features.

No cookies to display.

Analytical cookies are used to understand how visitors interact with the website. These cookies help provide information on metrics such as the number of visitors, bounce rate, traffic source, etc.

No cookies to display.

Performance cookies are used to understand and analyze the key performance indexes of the website which helps in delivering a better user experience for the visitors.

No cookies to display.

Advertisement cookies are used to provide visitors with customized advertisements based on the pages you visited previously and to analyze the effectiveness of the ad campaigns.

No cookies to display.

2.2 Η μετατροπή τύπων (type casting) στη Java

Η μετατροπή τύπων (type casting) στη Java αναφέρεται στη διαδικασία ανάθεσης μιας τιμής ενός αρχικού πρωτεϊκού τύπου δεδομένων σε έναν διαφορετικό τύπο δεδομένων.

Στη Java, υπάρχουν δύο είδη μετατροπής τύπων:

Αυτόματη μετατροπή (Widening Casting) – μετατροπή ενός μικρότερου τύπου σε έναν μεγαλύτερο τύπο δεδομένων
byte -> short -> char -> int -> long -> float -> double

Χειροκίνητη μετατροπή (Narrowing Casting) – μετατροπή ενός μεγαλύτερου τύπου σε έναν μικρότερο τύπο δεδομένων
double -> float -> long -> int -> char -> short -> byte

Κατά τη μετατροπή τύπων δεδομένων, μπορεί να προκύψουν απώλειες ακρίβειας και στρογγυλοποιήσεις. Για την αυτόματη μετατροπή, η Java εκτελεί αυτόματα τη μετατροπή τύπων όταν αναθέτουμε μια τιμή μιας μικρότερης δεξαμενής σε μια μεγαλύτερη δεξαμενή.

Για τη χειροκίνητη μετατροπή, ο προγραμματιστής πρέπει να χρησιμοποιήσει τη συντακτική δομή για να δηλώσει τον επιθυμητό τύπο δεδομένων. Οι μετατροπές αυτού του είδους πρέπει να χρησιμοποιούνται με προσοχή, καθώς μπορεί να υπάρξουν προβλήματα με την ακρίβεια και το μέγεθος της δεξαμενής του τύπου δεδομένων.

Ένα παράδειγμα αυτόματης μετατροπής είναι η ανάθεση ενός ακεραίου αριθμού σε ένα double. Το Java θα εκτελέσει αυτόματα τη μετατροπή, εφόσον η δεξαμενή του double είναι μεγαλύτερη από τη δεξαμενή του int.

Ένα παράδειγμα χειροκίνητης μετατροπής είναι η μετατροπή ενός double σε ένα int. Σε αυτήν την περίπτωση, πρέπει να χρησιμοποιηθεί η συντακτική δομή για να δηλωθεί ο επιθυμητός τύπος δεδομένων και να αναθεθεί η τιμή σε αυτόν τον τύπο δεδομένων, π.χ.:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
double myDouble = 3.14159;
int myInt = (int) myDouble;
double myDouble = 3.14159; int myInt = (int) myDouble;
double myDouble = 3.14159;
int myInt = (int) myDouble;

Στο παραπάνω παράδειγμα, η μεταβλητή myDouble περιέχει την τιμή 3.14159, ενώ η μεταβλητή myInt περιέχει την τιμή 3 μετά την χειροκίνητη μετατροπή του τύπου δεδομένων.

Είναι σημαντικό να θυμάστε ότι η χειροκίνητη μετατροπή μπορεί να προκαλέσει απώλεια ακρίβειας και στρογγυλοποίηση των δεδομένων, οπότε πρέπει να χρησιμοποιείτε με προσοχή και να επαληθεύετε ότι η μετατροπή πραγματοποιείται σωστά και δεν επηρεάζει την λειτουργικότητα του προγράμματος.

Ένα άλλο παράδειγμα χειροκίνητης μετατροπής είναι η μετατροπή ενός int σε ένα byte. Σε αυτήν την περίπτωση, πρέπει να προσέξετε ότι η δεξαμενή του byte είναι μικρότερη από τη δεξαμενή του int, και μπορεί να προκληθεί απώλεια δεδομένων, οπότε πρέπει να είστε ιδιαίτερα προσεκτικοί κατά τη χρήση αυτού του είδους μετατροπής.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
int myInt = 65;
byte myByte = (byte) myInt;
int myInt = 65; byte myByte = (byte) myInt;
int myInt = 65;
byte myByte = (byte) myInt;

Στο παραπάνω παράδειγμα, η μεταβλητή myInt περιέχει την τιμή 65, ενώ η μεταβλητή myByte περιέχει την τιμή 65 μετά την χειροκίνητη μετατροπή του τύπου δεδομένων.

Σε γενικές γραμμές, η μετατροπή τύπων δεδομένων πρέπει να γίνεται με προσοχή και με σεβασμό στις δεξαμενές των τύπων δεδομένων και την ακρίβεια των δεδομένων που αντιστοιχούν σε αυτούς τους τύπους.

Η ευρεία μετατροπή γίνεται αυτόματα όταν περνάτε έναν τύπο μικρότερου μεγέθους σε έναν τύπο μεγαλύτερου μεγέθους. Αυτό συμβαίνει διότι ο τύπος μεγαλύτερου μεγέθους έχει μεγαλύτερη δεξαμενή από τον μικρότερο τύπο, έτσι ώστε να μπορεί να χωρέσει την τιμή του μικρότερου τύπου δεδομένων.

[adinserter block=”2″]

Αυτό σημαίνει ότι δεν χρειάζεται να χρησιμοποιήσετε ειδικό κώδικα για να εκτελέσετε αυτήν τη μετατροπή, καθώς το Java το εκτελεί αυτόματα.

Παραδείγματα ευρείας μετατροπής:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
int myInt = 5;
long myLong = myInt;
int myInt = 5; long myLong = myInt;
int myInt = 5;
long myLong = myInt;

Στο παραπάνω παράδειγμα, η μεταβλητή myInt περιέχει την τιμή 5 και είναι τύπου int, ενώ η μεταβλητή myLong είναι τύπου long και περιέχει την ίδια τιμή με την μεταβλητή myInt. Επειδή ο τύπος δεδομένων long έχει μεγαλύτερη δεξαμενή από τον τύπο int, η τιμή της μεταβλητής myInt μπορεί να ευρεία μετατραπεί στον τύπο long χωρίς την απώλεια των δεδομένων.

Επίσης, μπορείτε να εκτελέσετε ευρεία μετατροπή όταν περνάτε μια μεταβλή από έναν μέθοδο που επιστρέφει έναν μικρότερου μεγέθους τύπο σε έναν μεγαλύτερου μεγέθους τύπο:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
double myDouble = 3.14;
int myInt = (int) myDouble;
double myDouble = 3.14; int myInt = (int) myDouble;
double myDouble = 3.14;
int myInt = (int) myDouble;

Στο παραπάνω παράδειγμα, η μεταβλητή myDouble περιέχει την τιμή 3.14 και είναι τύπου double, ενώ η μεταβλητή myInt είναι τύπου int και περιέχει την τιμή 3, δηλαδή το ακέραιο μέρος της τιμής της μεταβλητής myDouble. Καθώς ο τύπος δεδομένων int έχει μικρότερη δεξαμενή από τον τύπο double, χρησιμοποιούμε τη στενή μετατροπή για να μετατρέψουμε την τιμή της μεταβλητής myDouble σε τύπο int.

Πρέπει να σημειωθεί ότι η ευρεία μετατροπή μπορεί να οδηγήσει σε απώλεια ακρίβειας στα δεδομένα, καθώς η τιμή της μικρότερης δεξαμενής του τύπου δεδομένων μπορεί να μην αντιπροσωπεύει πλήρως την αρχική τιμή του μεγαλύτερου τύπου. Για αυτό το λόγο, πρέπει να προσέχετε όταν χρησιμοποιείτε αυτόν τον τύπο μετατροπής.

Βεβαίως! Παρακάτω έχουμε ένα παράδειγμα που χρησιμοποιεί τόσο ευρεία όσο και στενή μετατροπή:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
public class TypeCastingExample {
public static void main(String[] args) {
int myInt = 10;
double myDouble = myInt; // widening casting
System.out.println("Value of myDouble: " + myDouble);
double myDouble2 = 3.14;
int myInt2 = (int) myDouble2; // narrowing casting
System.out.println("Value of myInt2: " + myInt2);
}
}
public class TypeCastingExample { public static void main(String[] args) { int myInt = 10; double myDouble = myInt; // widening casting System.out.println("Value of myDouble: " + myDouble); double myDouble2 = 3.14; int myInt2 = (int) myDouble2; // narrowing casting System.out.println("Value of myInt2: " + myInt2); } }
public class TypeCastingExample {
  public static void main(String[] args) {
    int myInt = 10;
    double myDouble = myInt; // widening casting
    System.out.println("Value of myDouble: " + myDouble);

    double myDouble2 = 3.14;
    int myInt2 = (int) myDouble2; // narrowing casting
    System.out.println("Value of myInt2: " + myInt2);
  }
}

Στο παραπάνω παράδειγμα, αρχικά έχουμε μια μεταβλητή myInt που περιέχει την τιμή 10 και είναι τύπου int. Στη συνέχεια, εκτελούμε μια ευρεία μετατροπή και αποθηκεύουμε την τιμή στη μεταβλητή myDouble, η οποία είναι τύπου double. Τέλος, εκτυπώνουμε την τιμή της μεταβλητής myDouble στην οθόνη.

Στη συνέχεια, έχουμε μια μεταβλητή myDouble2 που περιέχει την τιμή 3.14 και είναι τύπου double. Στη συνέχεια, εκτελούμε μια στενή μετατροπή και αποθηκεύουμε την τιμή στη μεταβλητή myInt2, η οποία είναι τύπου int. Τέλος, εκτυπώνουμε την τιμή της μεταβλητής myInt2 στην οθόνη.

[adinserter block=”3″]

Η στενή μετατροπή πρέπει να γίνεται χειροκίνητα, δηλώνοντας τον επιθυμητό τύπο δεδομένων σε παρενθέσεις πριν από την τιμή. Ας δούμε ένα παράδειγμα:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
double myDouble = 3.14;
int myInt = (int) myDouble;
double myDouble = 3.14; int myInt = (int) myDouble;
double myDouble = 3.14;
int myInt = (int) myDouble;

Στο παραπάνω παράδειγμα, η μεταβλητή myDouble περιέχει την τιμή 3.14 και είναι τύπου double, ενώ η μεταβλητή myInt είναι τύπου int και περιέχει την τιμή 3, δηλαδή το ακέραιο μέρος της τιμής της μεταβλητής myDouble. Καθώς ο τύπος δεδομένων int έχει μικρότερη δεξαμενή από τον τύπο double, χρησιμοποιούμε τη στενή μετατροπή για να μετατρέψουμε την τιμή της μεταβλητής myDouble σε τύπο int.

Πρέπει να σημειωθεί ότι η στενή μετατροπή μπορεί να οδηγήσει σε απώλεια ακρίβειας στα δεδομένα, καθώς η τιμή της μικρότερης δεξαμενής του τύπου δεδομένων μπορεί να μην αντιπροσωπεύει πλήρως την αρχική τιμή του μεγαλύτερου τύπου. Για αυτό το λόγο, πρέπει να προσέχετε όταν χρησιμοποιείτε αυτόν τον τύπο μετατροπής.

Βεβαίως! Ας δούμε ένα παράδειγμα που χρησιμοποιεί στενή μετατροπή:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
public class TypeCastingExample {
public static void main(String[] args) {
double myDouble = 3.14;
int myInt = (int) myDouble;
System.out.println("Value of myDouble: " + myDouble);
System.out.println("Value of myInt: " + myInt);
}
}
public class TypeCastingExample { public static void main(String[] args) { double myDouble = 3.14; int myInt = (int) myDouble; System.out.println("Value of myDouble: " + myDouble); System.out.println("Value of myInt: " + myInt); } }
public class TypeCastingExample {
  public static void main(String[] args) {
    double myDouble = 3.14;
    int myInt = (int) myDouble;
    System.out.println("Value of myDouble: " + myDouble);
    System.out.println("Value of myInt: " + myInt);
  }
}

Στο παραπάνω παράδειγμα, η μεταβλητή myDouble περιέχει την τιμή 3.14 και είναι τύπου double. Στη συνέχεια, εκτελούμε μια στενή μετατροπή και αποθηκεύουμε την τιμή στη μεταβλητή myInt, η οποία είναι τύπου int. Τέλος, εκτυπώνουμε τις τιμές των μεταβλητών myDouble και myInt στην οθόνη.

Το παραπάνω παράδειγμα θα εκτυπώσει τις εξής γραμμές:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
Value of myDouble: 3.14
Value of myInt: 3
Value of myDouble: 3.14 Value of myInt: 3
Value of myDouble: 3.14
Value of myInt: 3

Παρατηρήστε ότι η τιμή της μεταβλητής myInt είναι 3, καθώς η στενή μετατροπή αποκόπτει το δεκαδικό μέρος της αρχικής τιμής της μεταβλητής myDouble.

Δωρεα μεσω Paypal

Για την κάλυψη αναγκών φιλοξενίας και δημιουργίας περιεχομένου.

κατηγοριες μαθηματων

Ιστορικο ενοτητων

top
error: Content is protected !!
Μετάβαση σε γραμμή εργαλείων