我理解以下Java输出.
public class EchoTestDrive {
public static void main(String[] args){
Echo e1 = new Echo();
Echo e2 = new Echo();
int x = 0;
while (x<4){
e1.hello();
e1.count = e1.count + 1;
if (x==3){
e2.count = e2.count +1;
}
if(x>0){
e2.count = e2.count + e1.count;
}
x = x+1;
System.out.println("e1.count is " + e1.count);
System.out.println("e2.count is " + e2.count);
}
System.out.println(e2.count);
}
}
class Echo {
int count = 0;
void hello (){
System.out.println ("helloooooooo..");
}
}
Run Code Online (Sandbox Code Playgroud)
输出
helloooooooo..
e1.count is 1
e2.count is 0
helloooooooo..
e1.count is 2
e2.count is 2
helloooooooo..
e1.count is 3
e2.count is 5
helloooooooo..
e1.count is 4
e2.count is 10
10
Run Code Online (Sandbox Code Playgroud)
但是,当我将Echo e2 = new Echo()更改为Echo e2 = e1时,我不明白为什么输出是这样的.
public class EchoTestDrive {
public static void main(String[] args){
Echo e1 = new Echo();
Echo e2 = e1;
int x = 0;
while (x<4){
e1.hello();
e1.count = e1.count + 1;
if (x==3){
e2.count = e2.count +1;
}
if(x>0){
e2.count = e2.count + e1.count;
}
x = x+1;
System.out.println("e1.count is " + e1.count);
System.out.println("e2.count is " + e2.count);
}
System.out.println(e2.count);
}
}
class Echo {
int count = 0;
void hello (){
System.out.println ("helloooooooo..");
}
}
Run Code Online (Sandbox Code Playgroud)
产量
helloooooooo..
e1.count is 1
e2.count is 1
helloooooooo..
e1.count is 4
e2.count is 4
helloooooooo..
e1.count is 10
e2.count is 10
helloooooooo..
e1.count is 24
e2.count is 24
24
Run Code Online (Sandbox Code Playgroud)
对于x,当x = 0时,e1.count为1,e2.count为0.当x = 1时,e1.count为e1.count为2,e2.count为2.
我希望有人解释一下.
提前致谢.
当你有Echo e2 = e1; 你这样做,所以e1和e2都指向相同的内存位置.因此,无论何时添加到e2,它都会添加到该内存位置,因此e1具有相同的值,反之亦然.特别
当x = 0时
e1.hello();
e1.count = e1.count + 1; //adds 1 to the memory location
if (x==3){ // x is 0 so doesn't go in
e2.count = e2.count +1;
}
if(x>0){ // x is 0 so doesn't go in
e2.count = e2.count + e1.count;
}
x = x+1;
System.out.println("e1.count is " + e1.count);
System.out.println("e2.count is " + e2.count);
}
System.out.println(e2.count);
}
Run Code Online (Sandbox Code Playgroud)
因此,存储器位置等于1,并且e1和e2都是1
当x = 1时
e1.hello();
e1.count = e1.count + 1;
//adds 1 to the memory location which was already 1 from last time and now equals 2
if (x==3){ // x is 1 so doesn't go in
e2.count = e2.count +1;
}
if(x>0){ // x is 1 so goes in as 1 is greater than 0
e2.count = e2.count + e1.count; // adds e2 and e1 = 2 + 2 from previous line above = 4
}
x = x+1;
System.out.println("e1.count is " + e1.count);
System.out.println("e2.count is " + e2.count);
}
System.out.println(e2.count);
}
Run Code Online (Sandbox Code Playgroud)
因此,存储器位置等于4,并且e1和e2都是4
| 归档时间: |
|
| 查看次数: |
808 次 |
| 最近记录: |