Hər bir primitiv tipin özünə uyğun obyekt tipində Wrapper classı var.
// new Long() parametr olaraq long və String qəbul edir Long L1 = new Long(1_000_000_000_000); // doesn't compile Long L2 = new Long(1_000_000_000_000L); Long L3 = new Long("5"); Long L4 = 5; // doesn't compile Long L5 = (long) 5; Long L6 = 5L; // new Float() parametr olaraq float, double və String qəbul edir Float f = 5; // doesn't compile Float f1 = 5.2; // doesn't compile Float f2 = 5.2f; Float f3 = new Float(5.2); Float f4 = new Float("5.2");
*Wrapper Constructors
String`i wrapper class və ya primitiv tipə çevirmək üçün parseXXX()
və valueOf()
metodlarından istifadə olunur.
int primitive = Integer.parseInt("123"); // bu metod geriyə primitive tip qaytarır Integer wrapper = Integer.valueOf("123"); // bu metod geriyə wrapper class qaytarır
Doğru parametr göndərilmədikdə exception verir.
int bad1 = Integer.parseInt("a"); // throws NumberFormatException Integer bad2 = Integer.valueOf("123.45"); // throws NumberFormatException int bad3 = Integer.parseInt(null); // throws NumberFormatException
Character classından başqa hamısının parse/valueOf metodları var:
**Converting from a String
Boolean
ilə bağlı müəyyən maraqlı qaydalar var, Enthuware testlərinin birinin izahında rastlaşacaqsınız. Baxaq:
Boolean
classının 2 constructoru var –Boolean(String)
vəBoolean(boolean)
. ƏgərString
parametrinull
deyilsə və dəyəri “true” (və ya “True” yaxud “tRuE”, yəni böyük-kiçik hərf duyarlı deyil) olarsa, o zaman geriyə dəyəritrue
olan Boolean obyekti qaytarılır. Əks haldafalse
olur.Boolean
classının boolean dəyər yaratmaq üçün 2 köməkçi static metodu var –parseBoolean
andvalueOf
.
Boolean.parseBoolean(String )
metodu geriyə obyekt deyil, primitiv tip qaytarır. Yuxarıda qeyd etdiyimiz qayda bunun üçün də keçərlidir, yəninull
deyilsə və dəyəri “true” olarsa, o zaman geriyətrue
qaytarır.valueOf
metodu overload metoddur, həmString
, həm dəboolean
tipində parametr qəbul edir. İşləmə qaydasıparseBoolean
ilə eynidir, amma ondan fərqli olaraq geriyə referans tip qaytarır, amma yeni obyekt yaratmır.==
operatoru ilə 2 boolean dəyəri müqayisə etdikdə, əgər tərəflərdən biriBoolean
wrapper class olarsa, o zaman o “unboxed” vasitəsilə primitiv tipə çevirilir və sonra müqayisə aparılır. Yox əgər hər iki tərəf wrapper classdırsa, o zaman onların referansları müqayisə olunur.
System.out.println(new Boolean("true ")); // false System.out.println(new Boolean("tRUe")); // true new Boolean("true") == new Boolean("true") // false new Boolean("true") == Boolean.valueOf("true") // false new Boolean("true") == Boolean.valueOf(true) // false new Boolean("true") == Boolean.parseBoolean("true") // true new Boolean(null) == Boolean.parseBoolean(" true ") // true new Boolean("true") == Boolean.parseBoolean(true) // does not compile Boolean.valueOf("true") == Boolean.TRUE // true new Boolean("true") == Boolean.TRUE // false Boolean.valueOf("truE") == Boolean.parseBoolean("True") // true
Fərqli Wrapper classlara aid referansları ==
operatoru ilə müqayisə etmək mümkün deyil, compile xətası verəcək:
Short k = 9; Integer w = 9; System.out.println(k == w); // does not compile short s = 9; int i = 9; System.out.println(s == i); // true
Aşağıdakı nümunəyə bənzər nümunə ilə Enthuware’də rastlaşacaqsınız. Ekrana nəyin çap olacağını tapmağa çalışın. Əgər cavabınız doğru olmasa kodu incələyin, output’dan artıq sizə çox şey məlum olacaq və bir yeni şey də öyrənmiş olacaqsınız 🙂
public static void main(String[] args) { Float f = null; try { f = Float.valueOf("11"); String s = f.toString(); double d = Double.valueOf(s); int i = Integer.parseInt(s); System.out.println(d + " " + i); } catch (NumberFormatException e) { System.out.println(f); } }
[topics lang=az]