finally節でのreturn

finallyで値をreturnするとtryの中でのreturnが上書きされるようだ。
普通finallyでreturnなんてしないけど、知らないと書いてしまう可能性があるかな。

public static void main(String[] args) {
    int j = hoge();    // j == 1になる
}

static int hoge() {
    try {
        return 0;
    } finally {
        return 1;
    }
}


C#だとコンパイルエラーになった

static void Main(string[] args)
{
    int i = hoge();
}

static int hoge()
{
    try
    {
        return 0;
    }
    finally
    {
        return 1;
    }
}