ورود

View Full Version : مبتدی: متغیر فاینال در جاوا



ehsan_faal
شنبه 18 بهمن 1393, 21:53 عصر
سلام.طبق چیزهایی که راجع به متغیر فاینال خوندم میشه فقط و فقط یه بار مقدار دهیش کرد اما توی کد زیر هر بار که مقدار متغیر فاینال رو عوض کردم، عوض شد، در مورد فاینال چیزی رو اشتباه فهمیدم؟

public class Test {

public static void main(String[] args) {
final short[] b = new short[10];
for (short c : b) {
System.out.print(c + " ");
}
System.out.println(" ");
for (int i = 0; i < b.length; i++) {
b[i] = (short) i;
}
for (short c : b) {
System.out.print(c + " ");
}
System.out.println(" ");
for (int i = 0; i < b.length; i++) {
b[i] = (short) 3;
}
for (short c : b) {
System.out.print(c + " ");
}
System.out.println(" ");
}
static final short[] p = new short[10];

}

cups_of_java
شنبه 18 بهمن 1393, 21:55 عصر
شما هیچ وقت توی کد بالا مقدار متغیر b رو عوض نمیکنید و هیچ عبارتی شبیه این ندارید:
b = ....

بلکه دارید خونه های داخلی b رو مقدار دهی میکنید و این هیچ منافاتی با final بودن یک متغیر نداره.

ehsan_faal
شنبه 18 بهمن 1393, 22:29 عصر
پس الان فاینال تعریف کردن b تو این حالت چه فایده ای میتونه داشته باشه؟
منظورم اینه که چه ویژگی ای از b ثابت در نظر گرفته میشه؟

cups_of_java
یک شنبه 19 بهمن 1393, 19:47 عصر
b ثابت یعنی اینکه مقدار خود b (که دار واقع همون آدرس ارچاع داخل b هستش) عوض نمیشه و این یعنی اینکه شما b رو فقط به یک شی می تونی اشاره بدی و بعدن نمی تونی یعدن توسط b به یه شی دیگه اشاره کنی. درست؟ و این با اینکه داخل اون شی ای که b بهش اشاره میکنه رو عوض میکنی فرق داره. اوکی؟
بنابراین وقتی یه متغیر از نوع ارجاع باشه به این معنی نیست که شما شی ای که داره بهش ارجاع میشه رو نمی تونی عوض کنی.