JShell เป็นเครื่องมือโต้ตอบใน Java 9 ที่อนุญาตให้ผู้ใช้ป้อนข้อมูล ประเมิน และพิมพ์ผลลัพธ์ไปยังผู้ใช้
ไม่เหมือนกับประเภทค่า ประเภทการอ้างอิง ไม่เก็บค่าไว้โดยตรง แต่จะเก็บ ที่อยู่ ที่ซึ่งค่าถูกเก็บไว้ หมายความว่า ประเภทอ้างอิง มี ตัวชี้ไปยังตำแหน่งหน่วยความจำอื่น ที่เก็บข้อมูล ประเภทการอ้างอิงคือ สตริง อาร์เรย์ คลาส และ ตัวแทน .
ในข้อมูลโค้ดด้านล่าง เมื่อเราสร้างตัวอย่างใหม่ของ สัตว์ สามารถสร้างได้ใน หน่วยความจำฮีป . สัตว์ใหม่() สร้างวัตถุบนฮีป Animal@73846619 , วัตถุถูกเก็บไว้ใน Heap ตามที่อยู่ 73846619 .
Snippet-1
jshell> class Animal { ...> } | created class Animal jshell> Animal dog = new Animal(); dog ==> Animal@73846619
ฉัน n ข้อมูลโค้ดด้านล่าง วัตถุสัตว์ใหม่สองรายการ ถูกสร้างขึ้นบนกอง ตำแหน่งหน่วยความจำ (ข้อมูลอ้างอิง) ของพวกเขาถูกเก็บไว้ในตัวแปรอ้างอิง dog และ แมว . ใน Java คลาสทั้งหมดเป็น ประเภทการอ้างอิง . ยกเว้นอินสแตนซ์ตัวแปรดั้งเดิม อินสแตนซ์หรืออ็อบเจ็กต์ทั้งหมดจะถูกเก็บไว้ในฮีป การอ้างอิงไปยังวัตถุจะถูกเก็บไว้ใน ตัวแปรอ้างอิง ชอบ หมา และ แมว .
ตัวอย่าง-2
jshell> class Animal { ...> int id; ...> public Animal(int id) { ...> this.id = id; ...> } ...> } | created class Animal jshell> Animal dog = new Animal(10); dog ==> Animal@6adede5 jshell> Animal cat = new Animal(20); cat ==> Animal@5025a98f
ฉัน n ข้อมูลโค้ดด้านล่าง "j =I " คัดลอกค่าของ "I" เป็น "j" ต่อมา เมื่อค่าของ "j" เปลี่ยนไป ค่า "I" จะไม่ได้รับผลกระทบ โดยใช้ตัวแปรพื้นฐาน เปรียบเทียบค่าของพวกมัน
Snippet-3
jshell> int i = 5; i ==> 5 jshell> int j; j ==> 0 jshell> j = i; j ==> 5 jshell> j = 10; j ==> 10 jshell> i; i ==> 5 jshell> i == j; $11 ==> false jshell> j = 5; j ==> 5 jshell> i == j; $13 ==> true