JAVA:指针等价物
我知道指针不像C中那样存在,但我想知道这样的事情是否可能: 我有5个全局变量,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)
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";
将在全球范围内保留。它可以