final修飾子
Javaでfinal修飾子があると学びました.
・メソッドはオーバーライドできない
・変数は値の変更ができない
・クラスは継承できない
この3点を実現することが可能ですよね?
#間違っている・他にもあるなら教えてください.
私はfinalを引数につけてみました.
public class Test {
public static void main(String[] args) {
char[] s = {'s','a','t','o'};
System.out.println(s);
modify(s);
// finalのはずが変更されている
System.out.println(s);
Integer i = 3;
Integer j = 6;
swap(i, j);
System.out.println(i + ":" + j);
Foo f1, f2;
f1 = new Foo();
f2 = new Foo();
f1.i = 3;
f2.i = 6;
swap(f1, f2);
System.out.println(f1.i + ":" + f2.i);
}
static void modify(final char[] s) {
s[0] = 'k';
}
static void swap(Integer i, Integer j) {
Integer temp;
temp = i;
i = j;
j = temp;
}
static void swap(Foo f1, Foo f2) {
int temp;
temp = f1.i;
f1.i = f2.i;
f2.i = temp;
}
}
class Foo {
int i;
}
modify関数でfinal修飾子をつけるとsatoがkatoにならないと予想していました.
ですが,実際にはコンパイルエラーにもならずsato→katoになりました.
final修飾子はC言語でいうところのchar * const c;でしょうか?
#ポインタの値は変更できないが,参照先の値は変更できるということですか?
あと,swap関数についても質問があります.
そもそもポインタがないので,基本型を実引数に与えるときはコピーされ,
参照型はコピーされないですよね?
なので,swap関数を2つ用意してみました.
Fooクラスのswap関数,Integerクラスのswap関数の2つです.
Fooクラスがうまく交換でき,Integerクラスが交換できない理由がわかりません.
#Integer temp;を使って参照値を交換していると思うのですが,違うのでしょうか?
補足
ありがとうございます。外経を上げる場合は15インチですか?16インチはどうでしょうか?現在は14インチです。