指针延迟和操作指向Java中等价结构的对象

指针延迟和操作指向Java中等价结构的对象,java,c++,Java,C++,你好 在C++中,你可以做如下: int x = 5 cout << x; // prints 5 int* px = &x; (*px)++; cout <<x; // prints 6 intx=5 不能。。。Java抽象了指针和内存位置的概念。指针和指针解引用在Java中是不可能的。为此,您必须创建一个包含int的对象。然后,您可以传递对该对象的引用,并可以增加该对象中的int。但是,不可能对同一个int有另一个引用,并且一个int的增量将增加另一个

你好
在C++中,你可以做如下:

int x = 5

cout << x;
// prints 5

int* px = &x;

(*px)++;
cout <<x;
// prints 6
intx=5

不能。。。Java抽象了指针和内存位置的概念。指针和指针解引用在Java中是不可能的。

为此,您必须创建一个包含int的对象。然后,您可以传递对该对象的引用,并可以增加该对象中的int。但是,不可能对同一个int有另一个引用,并且一个int的增量将增加另一个int的增量——除非这两种情况都是对同一个包装器对象的引用。

并非如此

您可以将Java视为通过引用传递所有内容,因此

Foo f1 = new Foo();
Foo f2 = f1;

意味着代码> F2< /Cord>和 F1指向同一对象(不同于C++,赋值将成为副本)。等效的C++代码将产生<代码> f2<代码> A<代码> Foo> < /C> > Java将把

int
s自动装箱到
Integer
s,但是
Integer
s是不可变的。因此,您需要编写自己的
MutableInteger
,或者使用类似
java.util.AtomicInteger
的东西,如果您希望通过引用传递并更改值作为副作用(我怀疑这是您的潜在动机)

遗憾的是,你不能重写java中的运算符,所以语法会变得更冗长,C++代码就更复杂了。

< p>答案是“排序”。只要处理原语,只需将值包装在数组中即可

int[] a = {5};
int[] b = a;
b[0]++;
System.out.println(a[0]);

正如其他人所指出的,对于更复杂的问题,最好的办法总是使用“增量”或“设置”方法创建一个对象,以修改存储值。

?这是java的特性之一:-)嘿。有时候会很好。因此,
const
,就这一点而言(不,
final
只是没有切掉它)。Java中没有引用调用。有没有否决的理由?编辑:我说“你可以把Java看作是通过引用传递所有东西”。强调“你能思考”。对于C++程序员来说,这是向JavaLand过渡的最好方法。代码片段对指针没有任何指针。C++也不存在。它是C。所以,尽管它可以从C++中使用,但是真正的C++程序更可能使用引用。@马丁——我很确定,它是C++而不是C。除非有一个称为CUT的整数。@ PigPink:好的,Pedantic先生。它的
C带有类
。在C++文件中编写C并不能使它成为C++的OOPS…我原本想问一个关于指针对指针的问题,但后来改变了主意。将更改标题。。。感谢您指出这一点。+1,甚至有一个泛型类已经做到了这一点:这在这种特殊情况下不起作用,因为
Integer
是不可变的:您可以传递一个Holder对象,但仍然不能更改它所持有的整数。Java不自动装箱原语吗?我很抱歉,我不完全确定你的意思,但我会尽力回答。在与自动装箱包装器类(即整数、短、长等)进行转换时,仅Java自动装箱原语。否则,Java确实将基元类型视为基元。显示如何解释Java中的某些代码语句。