>>63
Yeah, all non-fundamental/trivial types in Java are "reference types", but reference types in Java aren't the same as reference types in C++.
Java reference types are for compound objects that exist only on the garbage collected heap, an a can be assigned a null address/value explicitly. In a sense, they are semantically the same as pointers in C, just without additional syntax like * and ->.
C++ references can refer to fundamental/trivial objects anywhere in memory, whether they're on the stack, heap, or some other region of addressable memory. However, they must be explicitly bound to an actual object, you can't create reference that has an undefined address or null address unless you use some hacks like pointer-to-reference casts. They're primarily used for passing compound types by reference to functions, without requring * or -> syntax for dereferencing or accessing members.
struct foo { int a; int b; };
void bar(foo& f) { f.a = f.b * 3; }
// usually compiles down to equivalent machine code as is generated by the following:
void baz(foo* f) { f->a = f->b * 3; }