Java引用和C++引用之间有什么区别

pur*_*uck 3 c++ java pointers reference

所以我一直在想(在阅读这篇Java pdf时)......

我知道这可能看起来很愚蠢,但为什么我不能在c ++中这样做.

float &f = new float;
Run Code Online (Sandbox Code Playgroud)

这不是说f的引用是新浮点数的地址吗?

在Java中,我看到类似的东西

String s = new String("something")
Run Code Online (Sandbox Code Playgroud)

String s 被称为字符串引用.

Java中的"引用"一词与C++中的含义是否相同?

tem*_*def 14

Java引用更接近C++ 指针而不是C++ 引用.在Java中,您可以使用以下参考执行以下操作:

  • 更改它引用的对象
  • 检查两个引用是否相等或不相等
  • 将消息发送到引用的对象.

在C++中,指针具有相同的属性.因此,您在C++中寻找的代码就像

float* f = new float;
Run Code Online (Sandbox Code Playgroud)

这是完全合法的.为了更好地比较,这个Java代码:

String myString = new String("This is a string!"); // Normally I wouldn't allocate a string here, but just for the parallel structure we will.
System.out.println(myString.length());

/* Reassign myString to point to a different string object. */
myString = new String("Here's another string!");
System.out.println(myString.length());
Run Code Online (Sandbox Code Playgroud)

将映射到此C++代码:

std::string* myString = new std::string("This is a string");
std::cout << myString->length() << std::endl;

delete myString; // No GC in C++!

/* Reassign myString to point to a different string object. */
myString = new std::string("Here's another string!");
std::cout << myString->length() << std::endl;

delete myString; // No GC in C++!
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助!