Я искал образцы из тома I Core Java и разработал небольшой код.Объекты и переменная, проходящая в Java
import java.util.Date;
import java.util.GregorianCalendar;
class Test {
public static void main(String[] args) {
Employee[] staff = new Employee[3];
staff[0] = new Employee("Tony Tester", 40000, 1990, 3, 15);
System.out.println("initial hireDay: " + staff[0].getHireDay());
Date d = staff[0].getHireDay();
double tenYearsInMilliSeconds = 10 * 365.25 * 24 * 60 * 60 * 1000;
d.setTime(d.getTime() - (long) tenYearsInMilliSeconds);
System.out.println("d: " + d);
System.out.println("modified hireDay: " + staff[0].getHireDay());
System.out.println("initial salary: " + staff[0].getSalary());
int j = staff[0].getSalary();
j += 10;
System.out.println("j: " + j);
System.out.println("modified salary: " + staff[0].getSalary());
}
}
class Employee {
private int salary;
private Date hireDay;
public Employee(String n, int s, int year, int month, int day) {
salary = s;
GregorianCalendar calendar = new GregorianCalendar(year, month - 1, day);
hireDay = calendar.getTime();
}
public int getSalary() {
return salary;
}
public Date getHireDay() {
return (Date) hireDay;
}
}
Выход:
initial hireDay: Thu Mar 15 00:00:00 EST 1990
d: Fri Mar 14 12:00:00 EST 1980
modified hireDay: Fri Mar 14 12:00:00 EST 1980
initial salary: 40000
j: 40010
modified salary: 40000
В примере, конечное значение «» зарплаты не изменилась, а конечное значение «» hireDay изменилось. Как это произошло?? Это значит, что «зарплата» была передана по стоимости, когда «leaseDay» был передан по ссылке? Но потом я наткнулся на сообщение this, где упоминалось, что все прохождение в java по значению. Если да, то как может измениться значение «leaseDay»? Это связано с тем, что класс «Дата» изменен?
Заранее спасибо ...
Возможный дубликат [Is Java «pass-by-reference»?] (Http://stackoverflow.com/questions/40480/is-java-pass-by-reference) – vanza
Вы забыли установить значение в Наемный рабочий ? Значение копируется, а не ссылка. или как @vanza - указанный дубликат – user1428716