Java.lang.Number Class ב-Java

Java.lang.Number Class ב-Java

רוב הזמן תוך כדי עבודה עם מספרים ב-java אנו משתמשים סוגי נתונים פרימיטיביים . אבל Java מספקת גם מספרים שונים עֲטִיפָה מחלקות משנה תחת המחלקה המופשטת מספר הקיים ב java.lang חֲבִילָה. יש בעיקר שֵׁשׁ תת-מחלקות תחת מחלקות מספר. תת-מחלקות אלו מגדירות כמה שיטות שימושיות בהן נעשה שימוש תדיר בזמן התמודדות עם מספרים.
 

אובייקטים-מספר היררכיה


מחלקות אלה 'עוטפות' את סוג הנתונים הפרימיטיבי באובייקט תואם. לעתים קרובות העטיפה מתבצעת על ידי המהדר. אם אתה משתמש בפרימיטיבי שבו אובייקט צפוי, המהדר מעביר עבורך את הפרימיטיבי במחלקת העטיפה שלו. באופן דומה אם אתה משתמש באובייקט Number כאשר צפוי פרימיטיבי, המהדר משחרר את האובייקט עבורך. זה נקרא גם Autoboxing ו- Unboxing.
מדוע להשתמש באובייקט מחלקה Number על פני נתונים פרימיטיביים?  
 

  • קבועים המוגדרים על ידי מחלקת המספרים כגון MIN_VALUE ו-MAX_VALUE המספקים את הגבול העליון והתחתון של סוג הנתונים הם מאוד שימושיים.
  • ניתן להשתמש באובייקט מחלקה מספר כארגומנט של מתודה המצפה לאובייקט (משמש לעתים קרובות בעת מניפולציה של אוספים של מספרים).
  • ניתן להשתמש בשיטות מחלקות להמרת ערכים לסוגים פרימיטיביים אחרים וממנו להמרה אל וממחרוזות ולהמרה בין מערכות מספרים (בינארי אוקטלי הקסדצימלי עשרוני).


שיטות משותפות לכל תת המחלקות של מספר:  
 

    xxx xxxValue() : כאן xxx מייצגים סוגי נתונים של מספרים פרימיטיביים (בתים קצרים int long float double). שיטה זו משמשת להמרת הערך של זֶה אובייקט מספר לסוג הנתונים הפרימיטיביים שצוין. 
     
  Syntax :    byte byteValue() short shortValue() int intValue() long longValue() float floatValue() double doubleValue()   Parameters :    ----   Returns :   the numeric value represented by this object after conversion to specified type 


 

Java
   //Java program to demonstrate xxxValue() method   public     class   Test   {      public     static     void     main  (  String  []     args  )         {      // Creating a Double Class object with value '6.9685'      Double     d     =     new     Double  (  '6.9685'  );          // Converting this Double(Number) object to       // different primitive data types      byte     b     =     d  .  byteValue  ();         short     s     =     d  .  shortValue  ();         int     i     =     d  .  intValue  ();         long     l     =     d  .  longValue  ();         float     f     =     d  .  floatValue  ();         double     d1     =     d  .  doubleValue  ();             System  .  out  .  println  (  'value of d after converting it to byte : '     +     b  );      System  .  out  .  println  (  'value of d after converting it to short : '     +     s  );      System  .  out  .  println  (  'value of d after converting it to int : '     +     i  );      System  .  out  .  println  (  'value of d after converting it to long : '     +     l  );      System  .  out  .  println  (  'value of d after converting it to float : '     +     f  );      System  .  out  .  println  (  'value of d after converting it to double : '     +     d1  );      }   }   

תְפוּקָה: 
 

value of d after converting it to byte : 6 value of d after converting it to short : 6 value of d after converting it to int : 6 value of d after converting it to long : 6 value of d after converting it to float : 6.9685 value of d after converting it to double : 6.9685 


פֶּתֶק : בזמן המרה עלול להתרחש אובדן דיוק אפשרי. לדוגמה, כפי שאנו יכולים לראות שחלק שבר ('.9685') נותר בחוץ בזמן המרה מ-Double object ל-int data type. 
 

    int compareTo(NumberSubClass referenceName) : שיטה זו משמשת להשוואה זֶה אובייקט מספר לארגומנט שצוין. עם זאת לא ניתן להשוות בין שני סוגים שונים ולכן גם הארגומנט וגם האובייקט Number שמפעילים את השיטה צריכים להיות מאותו סוג. referenceName יכול להיות Byte Double Integer Float Long או Short. 
     
  Syntax :    public int compareTo( NumberSubClass referenceName )   Parameters :    referenceName - any NumberSubClass type value   Returns :   the value 0 if the Number is equal to the argument. the value 1 if the Number is less than the argument. the value -1 if the Number is greater than the argument. 


 

Java
   //Java program to demonstrate compareTo() method   public     class   Test   {      public     static     void     main  (  String  []     args  )         {      // creating an Integer Class object with value '10'      Integer     i     =     new     Integer  (  '10'  );          // comparing value of i      System  .  out  .  println  (  i  .  compareTo  (  7  ));         System  .  out  .  println  (  i  .  compareTo  (  11  ));         System  .  out  .  println  (  i  .  compareTo  (  10  ));         }   }   


תְפוּקָה: 
 

1 -1 0 


 

    בוליאני שווה (Object obj) : שיטה זו קובעת אם זֶה אובייקט מספר שווה לארגומנט. 
     
  Syntax :    public boolean equals(Object obj)   Parameters :    obj - any object   Returns :   The method returns true if the argument is not null and is an object of the same type and with the same numeric value otherwise false. 


 

Java
   //Java program to demonstrate equals() method   public     class   Test   {      public     static     void     main  (  String  []     args  )      {      // creating a Short Class object with value '15'      Short     s     =     new     Short  (  '15'  );          // creating a Short Class object with value '10'      Short     x     =     10  ;          // creating an Integer Class object with value '15'      Integer     y     =     15  ;          // creating another Short Class object with value '15'      Short     z     =     15  ;          //comparing s with other objects      System  .  out  .  println  (  s  .  equals  (  x  ));      System  .  out  .  println  (  s  .  equals  (  y  ));      System  .  out  .  println  (  s  .  equals  (  z  ));      }   }   


תְפוּקָה: 
 

false false true 


 

    int parseInt(String sint radix) : שיטה זו משמשת כדי לקבל את סוג הנתונים הפרימיטיבי של a חוּט . Radix משמש להחזרת ייצוג עשרוני (10) אוקטלי (8) או הקסדצימלי (16) וכו' כפלט. 
     
  Syntax :    static int parseInt(String s int radix)   Parameters :    s - any String representation of decimal radix - any radix value   Returns :   the integer value represented by the argument in decimal.   Throws :   NumberFormatException : if the string does not contain a parsable integer. 


 

Java
   //Java program to demonstrate Integer.parseInt() method   public     class   Test   {      public     static     void     main  (  String  []     args  )      {      // parsing different strings      int     z     =     Integer  .  parseInt  (  '654'    8  );         int     a     =     Integer  .  parseInt  (  '-FF'       16  );      long     l     =     Long  .  parseLong  (  '2158611234'    10  );             System  .  out  .  println  (  z  );      System  .  out  .  println  (  a  );      System  .  out  .  println  (  l  );          // run-time NumberFormatException will occur here      // 'Geeks' is not a parsable string      int     x     =     Integer  .  parseInt  (  'Geeks'    8  );             // run-time NumberFormatException will occur here      // (for octal(8)allowed digits are [0-7])      int     y     =     Integer  .  parseInt  (  '99'    8  );             }   }   


תְפוּקָה: 
 

428 -255 2158611234 Exception in thread 'main' java.lang.NumberFormatException: For input string: 'Geeks' at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) at java.lang.Integer.parseInt(Integer.java:580) at Test.main(Test.java:17) 


 

    int parseInt(String s) : שיטה זו היא גרסה נוספת של השיטה לעיל שבה כברירת מחדל, הרדיוס הוא 10 (עשרוני). 
     
  Syntax :    static int parseInt(String s)   Parameters :    s - any String representation of decimal   Returns :   the integer value represented by the argument in decimal.   Throws :   NumberFormatException : if the string does not contain a parsable integer. 


 

Java
   //Java program to demonstrate Integer.parseInt() method   public     class   Test   {      public     static     void     main  (  String  []     args  )         {      // parsing different strings      int     z     =     Integer  .  parseInt  (  '654'  );         long     l     =     Long  .  parseLong  (  '2158611234'  );             System  .  out  .  println  (  z  );      System  .  out  .  println  (  l  );          // run-time NumberFormatException will occur here      // 'Geeks' is not a parsable string      int     x     =     Integer  .  parseInt  (  'Geeks'  );             // run-time NumberFormatException will occur here      // (for decimal(10)allowed digits are [0-9])      int     a     =     Integer  .  parseInt  (  '-FF'  );          }   }   


תְפוּקָה: 
 

654 2158611234 Exception in thread 'main' java.lang.NumberFormatException: For input string: 'Geeks' at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) at java.lang.Integer.parseInt(Integer.java:580) at java.lang.Integer.parseInt(Integer.java:615) at Test.main(Test.java:15) 


 

    String toString() : ישנן שתי גרסאות של שיטת toString() . הם משמשים כדי לקבל ייצוג מחרוזת של מספר. הגרסאות האחרות של שיטות אלה הן Integer.toBinaryString(int i) Integer.toHexString(int i) Integer.toOctalString(int i) אשר יחזיר ייצוג מחרוזת אוקטלית בינארי משושה-עשרוני של מספר שלם (i) שצוין בהתאמה. 
     
  Syntax :    String toString() String toString(int i)   Parameters :    String toString() - no parameter String toString(int i) - i: any integer value   Returns :   String toString() - returns a String object representing the value of the Number object on which it is invoked. String toString(int i) - returns a decimal String object representing the specified integer(i) 
Java
   //Java program to demonstrate Integer.toString()    //and Integer.toString(int i) method   public     class   Test   {      public     static     void     main  (  String  []     args  )      {      // demonstrating toString() method      Integer     x     =     12  ;          System  .  out  .  println  (  x  .  toString  ());             // demonstrating toString(int i) method      System  .  out  .  println  (  Integer  .  toString  (  12  ));          System  .  out  .  println  (  Integer  .  toBinaryString  (  152  ));      System  .  out  .  println  (  Integer  .  toHexString  (  152  ));         System  .  out  .  println  (  Integer  .  toOctalString  (  152  ));      }   }   


תְפוּקָה: 
 

12 12 10011000 98 230 


 

    ערך שלם של() : ישנן שלוש גרסאות של שיטת valueOf(). כל שלוש השיטות הללו מחזירות אובייקט שלם המחזיק את הערך של מספר שלם פרימיטיבי. 
     
  Syntax :    Integer valueOf(int i) Integer valueOf(String s) Integer valueOf(String s int radix)   Parameters :    i - any integer value s - any String representation of decimal radix - any radix value   Returns :   valueOf(int i) : an Integer object holding the valuerepresented by the int argument. valueOf(String s) : an Integer object holding value represented by the string argument. valueOf(String s int radix) : an Integer object holding the value represented by the string argument with base radix.   Throws :   valueOf(String s) - NumberFormatException : if the string does not contain a parsable integer. valueOf(String s int radix) - NumberFormatException : if the string does not contain a parsable integer. 


 

Java
   // Java program to demonstrate valueOf() method   public     class   Test   {      public     static     void     main  (  String  []     args  )      {      // demonstrating valueOf(int i) method      System  .  out  .  println  (  'Demonstrating valueOf(int i) method'  );      Integer     i     =  Integer  .  valueOf  (  50  );         Double     d     =     Double  .  valueOf  (  9.36  );         System  .  out  .  println  (  i  );      System  .  out  .  println  (  d  );          // demonstrating valueOf(String s) method      System  .  out  .  println  (  'Demonstrating valueOf(String s) method'  );      Integer     n     =     Integer  .  valueOf  (  '333'  );         Integer     m     =     Integer  .  valueOf  (  '-255'  );         System  .  out  .  println  (  n  );      System  .  out  .  println  (  m  );          // demonstrating valueOf(String sint radix) method      System  .  out  .  println  (  'Demonstrating (String sint radix) method'  );      Integer     y     =     Integer  .  valueOf  (  '333'    8  );         Integer     x     =     Integer  .  valueOf  (  '-255'    16  );         Long     l     =     Long  .  valueOf  (  '51688245'    16  );         System  .  out  .  println  (  y  );      System  .  out  .  println  (  x  );      System  .  out  .  println  (  l  );          // run-time NumberFormatException will occur in below cases      Integer     a     =     Integer  .  valueOf  (  'Geeks'  );      Integer     b     =     Integer  .  valueOf  (  'Geeks'    16  );         }   }   


תְפוּקָה: 
 

Demonstrating valueOf(int i) method 50 9.36 Demonstrating valueOf(String s) method 333 -255 Demonstrating (String sint radix) method 219 -597 1365803589 Exception in thread 'main' java.lang.NumberFormatException: For input string: 'Geeks' at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) at java.lang.Integer.parseInt(Integer.java:580) at java.lang.Integer.valueOf(Integer.java:766) at Test.main(Test.java:28) 


 


שאלת תרגול:  
מה הפלט של קוד ה-Java הנתון?  
 

Java
   public     class   Test   {      public     static     void     main  (  String  []     args  )      {      Integer     i     =     Integer  .  parseInt  (  'Kona'       27  );      System  .  out  .  println  (  i  );      }   }   

אפשרויות:  
 

A) NumberFormatException at run-time B) NumberFormatException at compile-time C) 411787 


תשובה:  
 

C) 411787 


הסבר:  
מכיוון שהרדיוס הוא 27, אז התווים המותרים במחרוזת מילולית הם [0-9][A-Q](עבור 10 עד 26). אז הערך שלו יחושב באופן הבא: 
=> a*(27^0) + n*(27^1) + o*(27^2) + k*(27^3) 
=> 10*1 + 23*27 + 24*27*27 + 20*27*27*27 
=> 10 + 621 + 17496 + 393660 
=> 411787
 

צור חידון