JShell là công cụ tương tác Java 9 cho phép nhập người dùng, đánh giá và in kết quả.
Khác với kiểu giá trị, kiểu tham chiếu không lưu giá trị trực tiếp. Thay vào đó lưu địa chỉ nơi giá trị được lưu. Nghĩa là kiểu tham chiếu chứa con trỏ đến vị trí bộ nhớ khác giữ dữ liệu. Các kiểu tham chiếu là String, mảng, class, và delegate.
Đoạn mã dưới: khi tạo instance mới của Animal, nó tạo trên heap memory. new Animal() tạo object trên Heap. Animal@73846619, object lưu trên Heap tại địa chỉ 73846619.
Đoạn mã 1
jshell> class Animal {
...> }
| created class Animal
jshell> Animal dog = new Animal();
dog ==> Animal@73846619
Đoạn mã dưới: hai Animal object mới tạo trên Heap. Vị trí bộ nhớ (tham chiếu) lưu trong biến tham chiếu dog và cat. Trong Java, tất cả class là Reference Types. Trừ instance biến primitive, tất cả instance/object lưu trên Heap. Tham chiếu đến object lưu trong biến tham chiếu như dog và cat.
Đoạn mã 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
Đoạn mã dưới: j = i sao chép giá trị i vào j. Sau đó thay giá trị j, i không ảnh hưởng. Dùng biến primitive so sánh giá trị.
Đoạn mã 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