Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JAVA:指针等价物_Java_Pointers - Fatal编程技术网

JAVA:指针等价物

JAVA:指针等价物,java,pointers,Java,Pointers,我知道指针不像C中那样存在,但我想知道这样的事情是否可能: 我有5个全局变量,r1r2r3r4r5,每个变量最初初始化为null 我想(1)找到尚未使用的变量,(2)给它赋值,然后(3)稍后在程序中操作该变量。然而,在代码执行之前,我不知道变量的状态。为了弥补这一点,我现在有一系列if-else语句: if(r1==null) r1 = [something] else if(r2==null) r2 = [something] else if(r3==null)

我知道指针不像C中那样存在,但我想知道这样的事情是否可能:

我有5个全局变量,
r1r2r3r4r5
,每个变量最初初始化为
null

我想(1)找到尚未使用的变量,(2)给它赋值,然后(3)稍后在程序中操作该变量。然而,在代码执行之前,我不知道变量的状态。为了弥补这一点,我现在有一系列if-else语句:

if(r1==null)
    r1 = [something]    
else if(r2==null)
    r2 = [something]
else if(r3==null)
    r3 = [something]
else if(r4==null)
    r4 = [something]
else if(r5==null)
    r5 = [something]
到目前为止还不错。但问题是,我想取上面代码中修改过的变量,然后在程序中使用/修改该变量

所以说,如果
r1
r2
不为空,而
r3
为空,
r3=[something]
。我想稍后在程序中修改
r3
。在C/C++中,我想我可以在if-else语句中设置一个指向
r3
的指针。然后,我可以在程序中稍后通过该指针修改
r3

这在Java中可能吗?谢谢


编辑:忘记提到,
r1-r5
是字符串。

Java是一种面向对象的语言,对象是通过引用传递的。 因此,如果变量r1-r5是特定类的实例,那么传递它们与传递对象是一样的

因此,在单独的函数或方法中修改对象也将更新原始对象


在枕头下放一本好的Java书;Ditel和Ditel是初学者,Java LRM是毕业生。

Java是一种面向对象的语言,对象通过引用传递。 因此,如果变量r1-r5是特定类的实例,那么传递它们与传递对象是一样的

因此,在单独的函数或方法中修改对象也将更新原始对象


在枕头下放一本好的Java书;Ditel和Ditel是初学者,Java LRM是毕业生。

听起来你想使用数组。一旦你弄清楚哪个元素还没有被使用,只需保存索引并使用它。

听起来你想使用数组。一旦你弄清楚哪个元素还没有被使用,只需保存索引并使用它。

对于这样简单的事情,你可以使用数组。 可以保留数组索引作为指向所需变量的指针

String[] r = new String[5]; // all nulls
因此:

private int findFirstNull(String[] array) {
  for(int i=0; i<r.length; i++)
    if(r[i] == null)
      return i;
  return -1;
}
private int findFirstNull(字符串[]数组){

对于(inti=0;i对于这样简单的事情,可以使用数组。 可以保留数组索引作为指向所需变量的指针

String[] r = new String[5]; // all nulls
因此:

private int findFirstNull(String[] array) {
  for(int i=0; i<r.length; i++)
    if(r[i] == null)
      return i;
  return -1;
}
private int findFirstNull(字符串[]数组){

for(inti=0;iJava的反射api允许通过

简而言之,您可以在
字段
对象中存储对所需全局变量的引用,并根据需要查询/更新它。例如,假设全局变量的类型为String:

//静态字符串MyClass r1=null;
字段theGlobal=MyClass.class.getField(“r1”);
String s=(String)theGlobal.get(MyClass.class);
如果(s==null){
set(MyClass.class,“你好,反射!”);
//MyClass.r1==“你好,反射!”
}

然而,这样做的必要性看起来显然是糟糕的设计。很可能您的全局变量可以由其他成员变量类型更好地表示。

Java的反射API允许通过

简而言之,您可以在
字段
对象中存储对所需全局变量的引用,并根据需要查询/更新它。例如,假设全局变量的类型为String:

//静态字符串MyClass r1=null;
字段theGlobal=MyClass.class.getField(“r1”);
String s=(String)theGlobal.get(MyClass.class);
如果(s==null){
set(MyClass.class,“你好,反射!”);
//MyClass.r1==“你好,反射!”
}

然而,这样做的必要性看起来显然是糟糕的设计。很可能您的全局变量可以由其他成员变量类型更好地表示。

我认为您可以使用一个单独的全局变量来知道修改了哪一个(我想您只需要该字符串的引用)并使用如下方式:

if(r1==null)
    globalR = r1 = [something]    
else if(r2==null)
    globalR = r2 = [something]
else if(r3==null)
    globalR = r3 = [something]
else if(r4==null)
    globalR = r4 = [something]
else if(r5==null)
    globalR = r5 = [something]

然后您可以使用globalR来处理该字符串

我想您可以使用一个单独的全局变量来知道修改了哪一个(我想您只需要该字符串的引用)并使用如下方法:

if(r1==null)
    globalR = r1 = [something]    
else if(r2==null)
    globalR = r2 = [something]
else if(r3==null)
    globalR = r3 = [something]
else if(r4==null)
    globalR = r4 = [something]
else if(r5==null)
    globalR = r5 = [something]

然后,您可以使用globalR处理该字符串。Java通过值传递其对象。虽然您可以修改对象传递给方法的状态,并且这些修改保留在方法之外,但不会为对象分配另一个实例

例如,这样做会保留:

point.setX(10);
point.setY(100);
而像这样的事情不会:

point = new Point(10,100);
正如您所说的,您正在使用字符串,java中的字符串是不可变的,因此不可能修改其状态

像其他一些建议的答案一样,在这种情况下使用字符串数组是一个很好的选择。因为它是一个全局变量,您可以使用如下内容:

public static final String[] r = new String[5];
这样,改变它的一个元素

r[0] = "Some String";

将全局保留。

Java按值传递其对象。虽然您可以修改对象传递给方法的状态,并且这些修改保留在方法之外,但不会为对象分配另一个实例

例如,这样做会保留:

point.setX(10);
point.setY(100);
而像这样的事情不会:

point = new Point(10,100);
正如您所说的,您正在使用字符串,java中的字符串是不可变的,因此不可能修改其状态

像其他一些建议的答案一样,在这种情况下使用字符串数组是一个很好的选择。因为它是一个全局变量,您可以使用如下内容:

public static final String[] r = new String[5];
这样,改变它的一个元素

r[0] = "Some String";
将在全球范围内保留。

它可以