그거/Java

참, 자바란 것이 어렵다 ㅜㅜ

뽀기 2007. 10. 24. 11:13

class Test {
 public static void swap(int x, int y) {
  int temp;
  temp = y;
  y = x;
  x = temp;
 }

 public static void swap(Number n) {
  int temp;
  temp = n.x;
  n.x = n.y;
  n.y = temp;
 }

 public static void objRef(Number n) {
  n = null;
 }

 public static void main(String[] args) {
  int a = 10;
  int b = 20;

  System.out.println(a + ", " + b);
  swap(a, b);
  System.out.println(a + ", " + b);

  String str1 = "1234";
  String str2 = "1234";
  Integer int3 = new Integer(1234);
  String str4 = new String("1234");

  System.out.println(str1 == str2);
  System.out.println(str1.equals(int3));
  System.out.println(str1 == str4);
  System.out.println(str1.equals(str4));

  Number n = new Number();
  n.x = 10;
  n.y = 20;

  System.out.println(n.x + ", " + n.y);
  swap(n);
  System.out.println(n.x + ", " + n.y);
  objRef(n);
  System.out.println(n.x + ", " + n.y);

 }
}

class Number {
 int x;
 int y;
}



위 결과가 어찌 될 것인가......


10, 20
10, 20
true
false     <--- equals(Object) method라서 "1234".equals(new Integer(1234)) 하면
               new Integer(1234)가 toString() 되서 true가 될 줄 알았는데 false 다.
false
true
10, 20
20, 10
20, 10    <--- 분며이 objRef(Number n)에서 n = null; 을 했는데 왜 값이 찍히지?
               NullPointerException 나야 되는거 아녀? -_-;


이렇단다.
아.. Java를 몇년을 해도 저게 헷갈리는 이유가 대체 무엇이란 말인가.
아.. 돌머리.. ㅡ,.ㅡ;