เช่นทำไมคุณสามารถทำ:
int n = 9;
แต่ไม่:
Integer n = 9;
และคุณสามารถทำได้:
Integer.parseInt("1");
แต่ไม่:
int.parseInt("1");
Integer n = 9;
เนื่องจาก autoboxing (ยกเว้นกรณีที่คุณกำลังใช้รุ่นเก่ามากของ Java)
เช่นทำไมคุณสามารถทำ:
int n = 9;
แต่ไม่:
Integer n = 9;
และคุณสามารถทำได้:
Integer.parseInt("1");
แต่ไม่:
int.parseInt("1");
Integer n = 9;
เนื่องจาก autoboxing (ยกเว้นกรณีที่คุณกำลังใช้รุ่นเก่ามากของ Java)
คำตอบ:
int
เป็นชนิดดั้งเดิม ตัวแปรชนิดที่int
จัดเก็บค่าไบนารีจริงสำหรับจำนวนเต็มที่คุณต้องการเป็นตัวแทน int.parseInt("1")
ไม่ได้ทำให้รู้สึกเพราะint
เป็นไม่ได้ระดับและดังนั้นจึงไม่ได้มีวิธีการใด ๆ
Integer
เป็นคลาสที่ไม่แตกต่างจากภาษาอื่นในภาษา Java ตัวแปรของการอ้างอิงประเภทInteger
ร้านค้ากับวัตถุเช่นเดียวกับประเภทการอ้างอิงอื่น ๆ (วัตถุ) เป็นการเรียกใช้เมธอดสแตติกจากคลาส(โปรดทราบว่าเมธอดนี้ส่งคืนและไม่ใช่)Integer
Integer.parseInt("1")
parseInt
Integer
int
Integer
การจะมีความเฉพาะเจาะจงมากขึ้นเป็นชั้นที่มีเขตข้อมูลเดียวของชนิดInteger
int
คลาสนี้ถูกใช้int
เพื่อให้คุณได้รับการปฏิบัติเช่นเดียวกับวัตถุอื่น ๆ เช่นในประเภททั่วไปหรือสถานการณ์ที่คุณต้องการความไร้ผล
โปรดทราบว่าทุกประเภทดั้งเดิมใน Java มีคลาสwrapperเทียบเท่า:
byte
มี Byte
short
มี Short
int
มี Integer
long
มี Long
boolean
มี Boolean
char
มี Character
float
มี Float
double
มี Double
คลาสของ Wrapper สืบทอดมาจากคลาส Object และไม่ใช่แบบดั้งเดิม ดังนั้นจึงสามารถใช้ในคอลเลกชันที่มีการอ้างอิงวัตถุหรือกับ Generics
ตั้งแต่ java 5 เรามีออโต้บ็อกซ์และการแปลงระหว่างคลาสดั้งเดิมและคลาส wrapper จะถูกทำโดยอัตโนมัติ อย่างไรก็ตามระวังเพราะสิ่งนี้สามารถแนะนำข้อบกพร่องที่ละเอียดอ่อนและปัญหาประสิทธิภาพการทำงาน ชัดเจนเกี่ยวกับการแปลงไม่เจ็บ
C#
ทุกประเภทข้อมูลมี "นามแฝง" และint.Parse()
ไม่มีเหตุผล (แม้ว่ามันจะไม่เป็นจริง)
C#
ไม่เกี่ยวข้องอย่างสมบูรณ์ที่นี่
ค่า Integer นั้นค่อนข้างจะเป็นเพียงแค่ wrapper สำหรับ int ดั้งเดิม type ช่วยให้คุณใช้ฟังก์ชั่นทั้งหมดของคลาส Integer เพื่อทำให้ชีวิตของคุณง่ายขึ้น
หากคุณยังใหม่กับ Java สิ่งที่คุณควรเรียนรู้ที่จะชื่นชมคือเอกสาร Java ตัวอย่างเช่นทุกสิ่งที่คุณต้องการทราบเกี่ยวกับInteger Classนั้นจะมีการบันทึกรายละเอียดไว้
ตรงนี้เป็นเอกสารประกอบสำหรับคลาส Integer:
ชั้น Integer ล้อมรอบคุณค่าของดั้งเดิมประเภท int ในวัตถุ วัตถุประเภทจำนวนเต็มมีเขตข้อมูลเดียวที่มีประเภทเป็น int
Integer
คลาสนั้นสามารถเก็บไว้ในคอนเทนเนอร์ (ไม่เหมือนชนิดดั้งเดิม)
ตัวแปร int เก็บค่าจำนวนเต็ม 32 บิตที่เซ็นชื่อ Integer (ที่มี capital I) ถือการอ้างอิงถึงอ็อบเจกต์ของคลาส (ประเภท) Integer หรือเป็นโมฆะ
Java ปลดเปลื้องโดยอัตโนมัติระหว่างสอง; จากจำนวนเต็มถึง int ทุกครั้งที่วัตถุจำนวนเต็มเกิดขึ้นเป็นอาร์กิวเมนต์ให้กับตัวดำเนินการ int หรือถูกกำหนดให้กับตัวแปร int หรือค่า int ถูกกำหนดให้กับตัวแปร Integer การคัดเลือกนักแสดงนี้เรียกว่า boxing / unboxing
ถ้าตัวแปรอ้างอิงจำนวนเต็มเป็นโมฆะไม่มีการบอกกล่าวอย่างชัดเจนหรือโดยปริยาย NullPointerException จะถูกโยนทิ้ง
(ในข้อความด้านบนคำว่า "ตัวแปร" หมายถึงตัวแปรท้องถิ่นเขตข้อมูลหรือพารามิเตอร์)
Integer
หมายถึง wrapper type ใน Java ในขณะที่int
เป็นชนิดดั้งเดิม ทุกอย่างยกเว้นชนิดข้อมูลดั้งเดิมใน Java ถูกนำมาใช้เช่นเดียวกับวัตถุที่บอกเป็นนัย Java เป็นภาษาโปรแกรมเชิงวัตถุบริสุทธิ์ที่มีคุณภาพสูง หากคุณต้องการประเภทพื้นฐานทั้งหมดยังสามารถใช้ได้เป็นประเภท wrapper ใน Java คุณสามารถได้รับประโยชน์ด้านประสิทธิภาพบางอย่างด้วยประเภทดั้งเดิมและดังนั้นควรใช้ประเภทเสื้อคลุมเฉพาะเมื่อจำเป็นเท่านั้น
ในตัวอย่างของคุณดังต่อไปนี้
Integer n = 9;
ค่าคงที่9
จะถูกบรรจุไว้ในกล่องอัตโนมัติ ( auto-boxing
และunboxing
เกิดขึ้นโดยอัตโนมัติจากjava 5
เป็นต้นไป) Integer
และดังนั้นคุณสามารถใช้คำสั่งเช่นนั้นและInteger n = new Integer(9)
ด้วย นี่คือความจริงผ่านคำสั่งInteger.valueOf(9).intValue();
int เป็นชนิดดั้งเดิมและไม่ใช่วัตถุ นั่นหมายความว่าไม่มีวิธีการที่เกี่ยวข้อง จำนวนเต็มเป็นวัตถุที่มีวิธีการ (เช่น parseInt)
ด้วยจาวารุ่นใหม่จะมีฟังก์ชั่นสำหรับ auto Boxing (และ unboxing) นั่นหมายความว่าคอมไพเลอร์จะแทรก Integer.valueOf (int) หรือ integer.intValue () เมื่อจำเป็น นั่นหมายความว่าเป็นไปได้จริงที่จะเขียน
Integer n = 9;
ซึ่งตีความว่าเป็น
Integer n = Integer.valueOf(9);
จำนวนเต็มเป็นคลาส wrapper / Object และ int เป็นชนิดดั้งเดิม ความแตกต่างนี้มีบทบาทอย่างมากเมื่อคุณต้องการเก็บค่า int ไว้ในคอลเล็กชันเนื่องจากยอมรับเฉพาะวัตถุเป็นค่า (จนถึง jdk1.4) JDK5 เป็นต้นไปเนื่องจากการ autoboxing มันเป็นเรื่องที่แตกต่างกันอย่างสิ้นเชิง
Integer.valueOf(i)
หรือInteger.intValue()
สำหรับคุณ Collection<int>
จะยังไม่ทำงาน ดังนั้นมันจึงไม่ใช่เรื่องที่แตกต่างอย่างสิ้นเชิง - เป็นเรื่องเดียวกันโดยมีการจดชวเลขเล็กน้อย
ใน Java int เป็นชนิดข้อมูลดั้งเดิมในขณะที่ Integer เป็นคลาสตัวช่วยใช้ในการแปลงเป็นประเภทข้อมูลหนึ่งไปเป็นประเภทอื่น
ตัวอย่างเช่น:
double doubleValue = 156.5d;
Double doubleObject = new Double(doubleValue);
Byte myByteValue = doubleObject.byteValue ();
String myStringValue = doubleObject.toString();
ชนิดข้อมูลดั้งเดิมจัดเก็บหน่วยความจำที่เร็วที่สุดที่คลาส Helper ซับซ้อนและจัดเก็บในหน่วยความจำฮีพ
อ้างอิงจาก "David Gassner" Java Essential Training
int
เป็นชนิดดั้งเดิมที่แสดงถึงจำนวนเต็ม ในขณะที่เป็นวัตถุที่ห่อInteger
วัตถุจะช่วยให้คุณทำงานมากขึ้นเช่นการแปลงเลขฐานสิบหกสตริง ฯลฯint
Integer
นอกจากนี้คุณยังสามารถใช้แนวคิด OOP Integer
ด้วย ตัวอย่างเช่นคุณสามารถใช้ Integer สำหรับข้อมูลทั่วไป (เช่น)Collection
<Integer>
สิ่งนี้นำมาจากJava: การอ้างอิงที่สมบูรณ์รุ่นที่เก้า
Java ใช้ชนิดดั้งเดิม (เรียกอีกอย่างว่าชนิดง่าย) เช่นintหรือdoubleเพื่อเก็บชนิดข้อมูลพื้นฐานที่รองรับโดยภาษา ประเภทดั้งเดิมมากกว่าวัตถุที่ใช้สำหรับปริมาณเหล่านี้สำหรับประโยชน์ของการปฏิบัติงาน การใช้ออบเจ็กต์สำหรับค่าเหล่านี้จะช่วยเพิ่มโอเวอร์เฮดที่ไม่สามารถยอมรับได้แม้แต่การคำนวณที่ง่ายที่สุด ดังนั้นรูปแบบดั้งเดิมไม่เป็นส่วนหนึ่งของลำดับชั้นวัตถุและพวกเขาไม่ได้วัตถุสืบทอด
แม้จะมีประโยชน์ด้านประสิทธิภาพที่นำเสนอโดยประเภทดั้งเดิม แต่ก็มีบางครั้งที่คุณจะต้องแสดงวัตถุ ตัวอย่างเช่นคุณไม่สามารถส่งชนิดดั้งเดิมโดยอ้างอิงถึงวิธีการ นอกจากนี้หลายของโครงสร้างข้อมูลมาตรฐานดำเนินการโดย Java ทำงานบนวัตถุซึ่งหมายความว่า คุณไม่สามารถใช้เหล่านี้ (วัตถุที่เฉพาะเจาะจง) โครงสร้างข้อมูลในการจัดเก็บชนิดดั้งเดิม เพื่อจัดการกับสถานการณ์เหล่านี้ (และอื่น ๆ ), Java ให้ประเภท wrappers ซึ่งเป็นคลาสที่แค็ปซูลประเภทดั้งเดิมภายในวัตถุ
คลาสของ Wrapper นั้นเกี่ยวข้องโดยตรงกับ ฟีเจอร์autoboxingของ Java ห่อประเภทมีคู่ Float, ยาว, จำนวนเต็มสั้นไบต์ตัวอักษรและบูลีน คลาสเหล่านี้มีวิธีการมากมายที่ช่วยให้คุณสามารถรวมชนิดดั้งเดิมเข้ากับลำดับชั้นวัตถุของ Java
เพื่อเพิ่มประสิทธิภาพการรันไทม์รหัส Java, int
ประเภทดั้งเดิม (s)ได้รับการเพิ่มรวมทั้งfloat
, bool
ฯลฯ แต่พวกเขามาพร้อมกับมีการเรียนการห่อหุ้มเพื่อที่ว่าถ้าจำเป็นคุณสามารถแปลงและใช้พวกเขาเป็นมาตรฐานวัตถุ Java พร้อมกับยูทิลิตี้จำนวนมากที่มาเป็นสมาชิกของพวกเขา ฟังก์ชั่น (เช่นInteger.parseInt("1")
)
int
เป็นชนิดข้อมูลดั้งเดิมในขณะที่Integer
เป็น Reference หรือ Wrapper Type (Class) ใน Java
หลังจากนั้นจึงjava 1.5
นำเสนอแนวคิดของautoboxingและunboxingคุณสามารถเริ่มต้นทั้งสองอย่างint
หรือInteger
เช่นนี้
int a= 9
Integer a = 9 // both valid After Java 1.5.
ทำไม
Integer.parseInt("1");
แต่ไม่ใช่int.parseInt("1");
??
Integer
เป็น Class ที่กำหนดไว้ในjdk
ไลบรารีและparseInt()
เป็นวิธีการคงที่อยู่ในInteger
Class
ดังนั้นInteger.parseInt("1");
เป็นไปได้ใน java แต่int
เป็นประเภทพื้นฐาน (ถือว่าเป็นคำหลัก) ในภาษาจาวา ดังนั้นคุณจะไม่สามารถเรียกด้วยparseInt()
int