我正在用另一个'array2'实例化一个数组'array1',然后尝试修改'array2',这会改变'array1'.几个小时后,我意识到它可能是一个call-by或pass-by-ref/value错误.有人可以帮我解决这个问题并让我朝着正确的方向前进吗?
int[] src = {0,4,3,2,1};
int[] dest = src;
dest[0] = dest[0] + 2;
for (int node: dest) {
System.out.print(node + " ");
}
System.out.println("");
for (int node: src) {
System.out.print(node + " ");
}
Run Code Online (Sandbox Code Playgroud)
这会产生:
2 4 3 2 1
2 4 3 2 1
即源数组也被修改.提前致谢.
我熟悉java中的引用概念,但看到这段代码后我很困惑
public class App
{
public static void main( String[] args )
{
Test t1 = new Test(1);
Test t2 = new Test(8);
App.doSomething(t1, t2);
System.out.print(t1.a);
System.out.print(t2.a);
}
public static void doSomething(Test t1, Test t2){
System.out.print(t1.a++);
System.out.print(t2.a++);
t1 = new Test(999);
t2 = new Test(888);
}
}
Run Code Online (Sandbox Code Playgroud)
打印:
1
8
2
9
Run Code Online (Sandbox Code Playgroud)
为什么主函数中"t1.a"和"t1.b"的值不变为888和999?
我正在查看一些旧问题进行测试,但我遇到了一个非常简单的问题,但这不是我的预期.
public class Exampractice {
public static void f(int x, int[] y, int[] z) {
x = 2;
y[0] = x;
z = new int[5];
z[0] = 555;
}
public static void main(String[] args) {
int x = 111;
int[] y = {222, 333, 444, 555};
int[] z = {666, 777, 888, 999};
f(x, y, z);
System.out.println(x);
System.out.println(y[0]);
System.out.println(z[0]);
}
}
Run Code Online (Sandbox Code Playgroud)
该问题询问以下代码的结果是什么.我得到以下结果:
111
2
666
Run Code Online (Sandbox Code Playgroud)
我理解为什么x是111,因为局部变量覆盖所有其他变量,y [0] = 2,因为代码说它等于x,这是2,但我迷失了为什么z [0] = 666,因为它已在f中重新排列类.
我有一个模型:fase.java,带有整数和字符串+ getter 和 setter:
public class Fase implements Serializable {
private Integer age;
private String name;
}
Run Code Online (Sandbox Code Playgroud)
我想将整数和字符串存储在数组或数组列表中。我现在用这个:
public String[] getAllValues(){
String[] values = {age.toString(), name};
return values;
Run Code Online (Sandbox Code Playgroud)
然后在 dataServiceImpl.java 中,我使用以下命令检索数据:
user.getFase().getAllValues()[0];
Run Code Online (Sandbox Code Playgroud)
并检索年龄。
这是可行的,但我有的不仅仅是年龄和姓名,并且正在考虑是否可以将 Fase.java 中的所有内容放入一个 Array/ArrayList 中,因为它们是 Integer 和 String,然后在 dataServiceImpl.java 中检索它?
Fase.java 中是这样的:ArrayList <Objects> f3Values = new ArrayList <Objects>();
或者Fase [] f3Array = new Fase[34];
然后使用以下命令在 dataServiceImpl.java 中检索它:ArrayList<Fase3.Fase3Array> f3List = new ArrayList<Fase3.Fase3Array>();
并使用类似:user.f3List[0];?
我准备参加OCJP考试,我有一个棘手的问题.我不知道为什么正确的答案是下一个:"B.300-300-100-100-100"问题听起来像这样:
1. class Foo {
2. private int x;
3. public Foo(int x) {
4. this.x = x;
5. }
6. public void setX(int x) {
7. this.x = x;
8. }
9. public int getX() {
10. return x;
11. }
12. }
13. public class Gamma {
14. static Foo fooBar(Foo foo) {
15. foo = new Foo(100);
16. return foo;
17. }
18. public static void main(String[] args) {
19. Foo foo = new Foo(300);
20. System.out.println(foo.getX() …Run Code Online (Sandbox Code Playgroud) 几个月后我开始学习Java课程,并且我正在尝试制作一个简单版的口袋妖怪游戏.到现在为止一切都很顺利,但现在我遇到了麻烦.
我的地图有障碍存储在Array(私有)中的类中,并使用get方法在其他类中使用Array.不知何故,这些其他类在第一个类中更改了Array.
这怎么可能?
我了解到在Java和C中,您可以分配指针,将指针传递给方法,跟随方法中的指针并更改指向的数据.但是,您无法更改指针指向的位置.
我认为由于它的传递引用功能,我可以在C++中看到不同的行为,但我的代码似乎同意上述声明......
void reassign(string & a);
int main()
{
string x = "abcd";
cout <<"x is " << x <<" at " << &x <<endl; //"x is abcd at 0x7bc7ebd5b720"
reassign(x);
cout <<"x is " << x <<" at " << &x <<endl; //"x is efgh at 0x7bc7ebd5b720"
}
void reassign(string & a)
{
a = string("efgh");
}
Run Code Online (Sandbox Code Playgroud)
由于"string()"构造一个新字符串,为什么"重新分配"函数不会改变原始字符串的地址?
我有一堂课:
class ListNode {
int val;
ListNode next;
ListNode(int x) { val = x; }
}
Run Code Online (Sandbox Code Playgroud)
打印LinkedList的函数是:
public static void printLinkedNode(ListNode l){
while(l != null){
System.out.print(l.val+" ");
l = l.next;
}
System.out.println(" ");
}
Run Code Online (Sandbox Code Playgroud)
在我的主要功能中,我创建了一个名为test的ListNode:
ListNode test = new ListNode(1);
head.next = new ListNode(2);
head.next.next = new ListNode(3);
head.next.next.next = new ListNode(4);
Run Code Online (Sandbox Code Playgroud)
如果我做答:
ListNode fast = head, slow = head;
fast = fast.next.next;
printLinkedNode(head); // I get 1->2->3->4
Run Code Online (Sandbox Code Playgroud)
如果我做B:
ListNode fast = head, slow = head;
fast.next = fast.next.next;
printLinkedNode(head); …Run Code Online (Sandbox Code Playgroud) 我尝试通过方法完成迭代来执行一个简单的 for 循环。它的返回值没有赋值
public class DefaultC {
public static void main(String[] args) {
int i = 1;
for(i= 10;i<=50; i=method(i)){
System.out.println(i);
}
}
static int method(int i){
return i++;
}
}
Run Code Online (Sandbox Code Playgroud)