简单的Java问题:";“子阵列”;及;“重新压缩”;指定变量;

简单的Java问题:";“子阵列”;及;“重新压缩”;指定变量;,java,Java,我对java非常陌生,只上过一门课,正在寻找更有效的方法来做事情 子阵列存在吗?我想将另一个数组范围内的元素分配给一个新数组 我接受教育的唯一方式是: int[] a = {a, b, c, d}; int[] b = {a[0], a[1]}; 是否有类似于variable.substring(停止,结束)的内容 这个很难解释。如果我有两个变量,a和b,b=a+1(例如),并且我改变了a,我必须重新分配b=a+1,否则b将等于我改变a之前所做的任何事情。有没有一种方法可以使用a的新值“刷新

我对java非常陌生,只上过一门课,正在寻找更有效的方法来做事情

子阵列存在吗?我想将另一个数组范围内的元素分配给一个新数组

我接受教育的唯一方式是:

int[] a = {a, b, c, d}; 
int[] b = {a[0], a[1]};
是否有类似于variable.substring(停止,结束)的内容

这个很难解释。如果我有两个变量,a和b,b=a+1(例如),并且我改变了a,我必须重新分配b=a+1,否则b将等于我改变a之前所做的任何事情。有没有一种方法可以使用a的新值“刷新”b,而不必每次都键入b=a+1(或更复杂的东西)

这不是为了功能,而是为了质量。

A)作为单个操作,唯一的方法是使用ArrayList。否则你所做的很好

B) 要更新值,需要执行赋值。如果你想神奇地实现这一点,你可以使用观察者/可观察模式来实现,但你仍然需要实现这一点,而且它不会比一行简单的代码更简单。

a)作为单个操作来实现这一点的唯一方法是使用ArrayList。否则你所做的很好


B) 要更新值,需要执行赋值。如果你想神奇地实现这一点,你可以用一个观察者/可观察模式来实现,但你仍然需要实现它,而且它不会比一行简单的代码更简单。

a.不,没有子数组。您可以使用
System.arraycopy
将一个数组的部分或全部复制到另一个数组

您可以使用列表而不是数组,尤其是
ArrayList
<代码>列表。子列表将为您提供原始列表的一部分的“视图”。(作为视图,这意味着如果修改了原始列表,子列表也将被修改,反之亦然)


不。对于这种情况,与其有一个单独的变量B,不如有一个计算B值的方法。然后,当你想知道b的值时,你调用这个方法。如果你想变得更花哨,你甚至可以引入某种缓存,但这是一种优化(最好留待你实际测量性能问题时考虑)。

a.不,没有子数组。您可以使用
System.arraycopy
将一个数组的部分或全部复制到另一个数组

您可以使用列表而不是数组,尤其是
ArrayList
<代码>列表。子列表将为您提供原始列表的一部分的“视图”。(作为视图,这意味着如果修改了原始列表,子列表也将被修改,反之亦然)

不。对于这种情况,与其有一个单独的变量B,不如有一个计算B值的方法。然后,当你想知道b的值时,你调用这个方法。如果你想变得更花哨,你甚至可以引入某种缓存,但这是一种优化(最好留待你实际衡量性能问题的时候)

这个很难解释

您似乎在寻找的术语是“值语义”和“引用语义”。在Java中,原语(int、char、double等类型的值)具有值语义:变量存储实际值,因此
b=a
复制该值,而
a+=1
增加该值,而不影响恰好持有相同值的任何其他变量。但是,对象(作为类实例的值)具有引用语义:变量实际上只是“标记”该值(存储对该值的某种引用),因此
b=a
为变量赋予相同的名称,并更改
a
(您不能在Java中重载运算符,因此在本例中,我们不能使
a+=1
编译)也更改
b
,因为它们实际上是相同的东西。(当然,尽管这仍然不会对任何其他碰巧是“相等”的对象产生任何影响,不管这对该类型实际意味着什么。)

Java确实提供了名为
Integer
Char
Double
等具有引用语义和镜像基元类型的对象。但是,它们是不可变的(即无法更改),因此它们不能解决这个“问题”

此外,所有这些都不会自动使两个不同的值“同步”(即通过某个数学函数关联)。如果您希望
b
始终等于
a+1
(或通常更复杂的值)不管<代码> a <代码>发生了什么,你都必须自己确定它。有很多方法可以做到这一点,复杂程度不同,并且该项工作的正确工具取决于各种因素。但是你首先应该考虑一下你是否真的想要保留<代码> B >代码>。你有一个很好的机会。ld真正要做的就是编写一个函数
b()
,它计算并返回
a+1
(或者,不管实际的关系是什么)

这个很难解释

您似乎在寻找的术语是“值语义”和“引用语义”have value semantics:变量存储实际值,因此
b=a
复制该值,而
a+=1
增加该值,而不影响恰好持有相同值的任何其他变量。但是,对象(类实例的值)具有引用语义:变量实际上只是“标签”值(存储对它的某种引用),因此
b=a
为变量提供相同的名称,并且更改
a
(在Java中不能重载运算符,因此在本例中我们不能使
a+=1
编译)也会更改
b
,因为