/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
{
Demo demo1 = new Demo();
demo1.changeReference();
Demo demo2 = new Demo();
demo2.changeInsideObject();
}
}
class Demo {
private int[][] table = {{1,2,3}, {4,5,6}};
public void changeReference() {
int[][] tab = table;
// this will change table to [[4,4,4]]. But since the original reference is copied into tab, tab will keep the original values.
doChange();
System.
out.
println("tab after reassigning:"); }
public void changeInsideObject() {
int[][] tab = table;
// This directly modifies table contents, and they get reflected into tab because the reference points to the same object
doChange2();
System.
out.
println("tab after changing inside element:"); }
private void doChange() {
table = new int[][] {{4,4,4}};
}
private void doChange2() {
table[0][0] = 12;
}
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgovKiBOYW1lIG9mIHRoZSBjbGFzcyBoYXMgdG8gYmUgIk1haW4iIG9ubHkgaWYgdGhlIGNsYXNzIGlzIHB1YmxpYy4gKi8KY2xhc3MgSWRlb25lCnsKCQoJcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBqYXZhLmxhbmcuRXhjZXB0aW9uCgl7CgkJRGVtbyBkZW1vMSA9IG5ldyBEZW1vKCk7CgkJZGVtbzEuY2hhbmdlUmVmZXJlbmNlKCk7CgkJCgkJRGVtbyBkZW1vMiA9IG5ldyBEZW1vKCk7CgkJZGVtbzIuY2hhbmdlSW5zaWRlT2JqZWN0KCk7Cgl9Cn0KCmNsYXNzIERlbW8gewoJcHJpdmF0ZSBpbnRbXVtdIHRhYmxlID0ge3sxLDIsM30sIHs0LDUsNn19OwoJCglwdWJsaWMgdm9pZCBjaGFuZ2VSZWZlcmVuY2UoKSB7CgkJaW50W11bXSB0YWIgPSB0YWJsZTsKCQkKCQkvLyB0aGlzIHdpbGwgY2hhbmdlIHRhYmxlIHRvIFtbNCw0LDRdXS4gQnV0IHNpbmNlIHRoZSBvcmlnaW5hbCByZWZlcmVuY2UgaXMgY29waWVkIGludG8gdGFiLCB0YWIgd2lsbCBrZWVwIHRoZSBvcmlnaW5hbCB2YWx1ZXMuCgkJZG9DaGFuZ2UoKTsKCQlTeXN0ZW0ub3V0LnByaW50bG4oInRhYiBhZnRlciByZWFzc2lnbmluZzoiKTsKCQlTeXN0ZW0ub3V0LnByaW50bG4oQXJyYXlzLmRlZXBUb1N0cmluZyh0YWIpKTsKCX0KCQoJCglwdWJsaWMgdm9pZCBjaGFuZ2VJbnNpZGVPYmplY3QoKSB7CgkJaW50W11bXSB0YWIgPSB0YWJsZTsKCQkKCQkvLyBUaGlzIGRpcmVjdGx5IG1vZGlmaWVzIHRhYmxlIGNvbnRlbnRzLCBhbmQgdGhleSBnZXQgcmVmbGVjdGVkIGludG8gdGFiIGJlY2F1c2UgdGhlIHJlZmVyZW5jZSBwb2ludHMgdG8gdGhlIHNhbWUgb2JqZWN0CgkJZG9DaGFuZ2UyKCk7CgkJU3lzdGVtLm91dC5wcmludGxuKCJ0YWIgYWZ0ZXIgY2hhbmdpbmcgaW5zaWRlIGVsZW1lbnQ6Iik7CgkJU3lzdGVtLm91dC5wcmludGxuKEFycmF5cy5kZWVwVG9TdHJpbmcodGFiKSk7Cgl9CgkKCXByaXZhdGUgdm9pZCBkb0NoYW5nZSgpIHsKCQl0YWJsZSA9IG5ldyBpbnRbXVtdIHt7NCw0LDR9fTsKCX0KCQoJcHJpdmF0ZSB2b2lkIGRvQ2hhbmdlMigpIHsKCQl0YWJsZVswXVswXSA9IDEyOwoJfQp9
tab after reassigning:
[[1, 2, 3], [4, 5, 6]]
tab after changing inside element:
[[12, 2, 3], [4, 5, 6]]