以下は、JAVAには参照渡しやアドレス渡しがないため、私が疑う余地のないコードです。では、メソッドの呼び出し後に出力が変化するのはなぜですか? また、メソッド呼び出し後の Java の内部メカニズムも知りたいですか?
class Language
{
String languageID;
String name;
public Language(){}
public Language(String id, String name)
{
this.languageID = id;
this.name = name;
}
@Override
public String toString() {
return "Language id-->" + languageID + " Name-->" + name;
}
}
public class SwapDemo {
public static void swap()
{
int a = 10, b= 5;
System.out.println("Before Swap : A-"+a+" B-"+b);
a = a+b;
b = a-b;
a = a-b;
System.out.println("After Swap : A-"+a+" B-"+b);
a = a^b;
b = a^b;
a = a^b;
System.out.println("After Swap : A-"+a+" B-"+b);
}
public static void swap(Language e1, Language e2)
{
Language temp = new Language();
temp = e1;
e1 = e2;
e2 = temp;
}
public static Language method(Language addit)
{
addit.name = "C++";
addit = new Language();
addit.name = "Harshal";
return addit;
}
public static void main(String[] args) {
Language l1 = new Language("1", "C");
Language l2 = new Language("2", "Java");
System.out.println("Before swap of employees");
System.out.println("Language 1-----> "+l1.toString());
System.out.println("Language 2-----> "+l2.toString());
swap(l1, l2);
System.out.println("After swap of employees");
System.out.println("Language 1-----> "+l1.toString());
System.out.println("Language 2-----> "+l2.toString());
Language t = method(l1);
System.out.println("Changing "+ l1.name);
System.out.println("Changing "+ t.name);
}
}