我在阅读这份 Java PDF 时想到了一件事...
我知道这可能看起来有些傻,但为什么我不能在 C++ 中这样做呢。
float &f = new float;
这句话的意思是f的引用是新浮点数的地址吗?
在Java中,我看到了这样的代码:
String s = new String("something")
String s
被称为字符串引用。
在Java中,“引用”这个词的含义和C++中相同吗?
我在阅读这份 Java PDF 时想到了一件事...
我知道这可能看起来有些傻,但为什么我不能在 C++ 中这样做呢。
float &f = new float;
这句话的意思是f的引用是新浮点数的地址吗?
在Java中,我看到了这样的代码:
String s = new String("something")
String s
被称为字符串引用。
在Java中,“引用”这个词的含义和C++中相同吗?
Java 中的引用更接近 C++ 中的指针,而不是 C++ 中的引用。在 Java 中,你可以使用引用来执行以下操作:
在 C++ 中,指针具有相同的属性。因此,你在 C++ 中需要寻找类似下面这样的代码:
float* f = new float;
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());
将会映射到以下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++!
const float* f
,因为在 Java 中也不允许将新值分配给内存地址。 - Voofloat
,而在 Java 中,引用绝对可以用来改变对象。想想 ArrayList
引用 - 如果你不能更改 ArrayList
,例如不能调用 add
。或者我是否误解你的意思? - templatetypedeffloat* f
会允许我们执行*f = 1.0
,但在Java中无法实现。C++中的扩展const概念在Java中根本无法映射...很遗憾,因为我认为它非常有用。 - Voo在C++中,你使用指针来处理这样的情况:
int foo = 0;
然后,您可以使用以下代码将指针引用到foo的地址:
int* bar = &foo;
这行代码表示bar的值是foo的内存地址。 Java通过引用来操作对象,每个对象都是一个引用,但它也会自动收集垃圾。如果你在C++中使用new关键字,你需要自己清理内存:
float* f = new float(0); // Allocate memory
...
delete f; // Free memory
在Java中,当你声明String s时,s并不包含新String的地址,而是它的值,在这种情况下是something。
你可以查看this
帖子了解有关Java变量地址位置的更多信息,这有点毫无意义。
是的,我同意Joni的观点,C++指针在语法上更接近Java中的引用。
C++中指针和引用之间的另一个重要区别是,指针可以指向一个真实的对象,也可以等于null。而C++中的引用则总是指向一个真实的对象或变量。在声明引用时,必须将其赋值给某个真实的东西。