伙计们,我是Java新手,在使用数组时遇到问题。这是我的代码
package exampleA;
public class exq {
public static void main(String[] args) {
dokimh p=new dokimh();
double[] k=p.ex(5);
double[] h=p.ex(0);
for(int i=0;i<=1;i++) {
System.out.println(k[i]);
}
}
}
package exampleA;
public class dokimh {
private double []d=new double[2];
double[] ex(double a) {
for(int i=0;i<=1;i++) {
d[i]=i+a;
}
return d;
}
}
您能帮我理解为什么当我使用数组h并在我的班级中传递另一个值时k的值会发生变化吗?谢谢!
答案 0 :(得分:0)
之所以会这样,是因为h
和k
都指向同一个实例(dokimh.d
也指向同一个实例)。
答案 1 :(得分:0)
在两种情况下,您都使用相同的变量d。因此,当您第二次调用p.ex()方法时,它将覆盖该值。使用局部变量d,
public class dokimh {
double[] ex(double a) {
double []d=new double[2];
for(int i=0;i<=1;i++) {
d[i]=i+a;
}
return d;
}
}
答案 2 :(得分:0)
ANSI NULLS
和Arith Abort
共享相同的数组> from pyspark.sql import functions as F
> from pyspark.sql.types import *
> df.show()
+----+-------------+
|col1| col2|
+----+-------------+
| A1|{"x":1,"y":2}|
| A2| {"z":3}|
+----+-------------+
> df.printSchema()
root
|-- col1: string (nullable = true)
|-- col2: string (nullable = true)
> df = df.withColumn(
.. "col2",
.. F.from_json("col2", MapType(StringType(),IntegerType()))
..)
> df.show()
+----+----------------+
|col1| col2|
+----+----------------+
| A1|[x -> 1, y -> 2]|
| A2| [z -> 3]|
+----+----------------+
> df.select(
.. "col1",
.. "col2.x",
.. "col2.y",
.. "col2.z",
..).show()
+----+----+----+----+
|col1| x| y| z|
+----+----+----+----+
| A1| 1| 2|null|
| A2|null|null| 3|
+----+----+----+----+
:k
是h
对象的成员,当您使用d
返回时函数,您将返回相同的引用。
所以在这里
d
p
引用了ex
的{{1}}数组成员,而double[] k=p.ex(5);
double[] h=p.ex(0);
也是如此。
答案 3 :(得分:0)
当创建对象“ p:”时,它包含称为“ d”的双精度数组。 在这两种情况下,当您调用方法在后台创建k或h数组时,都指向“ p”对象的数组。您的方法(如何实现它们)只是指向不同数组的指针。因此,即使您使用相同的方法调用10个timest,并在后台创建不同的数组(k,h,x,y,z ...),它们也始终引用您首次创建的表。这是数组的地址,而不是新的独立数组本身。