Всегда по значению!
Когда речь идет об объектах, передаваемое значение является значением ссылки, а не самой ссылкой.
См. Большинство этих ссылок
Языки, на которых поддерживается передача по ссылке (Java не поддерживает это), могут выполнять следующие действия:
Foo foo = new Foo();//create a new object
foo.name("Old foo"); // label it
modify( foo ); // try to modify it
// In a language that supports byRef will print "New foo".
// In Java will print "Old foo" always
println( foo );
...
void modify( Foo foo ) {
foo = new Foo(); // reference assigned a new different object
foo.name("New foo");
}
Таким образом, языки, поддерживающие передачу по ссылке, будут помещать новый объект, созданный внутри метода, в переданную им ссылку (в конце концов, они получают ссылку ).Такие языки, как C ++ и VB, могут делать это ..
Языки, которые не поддерживают передачу по ссылке (например, Java), не будут назначать новый объект исходной ссылке, Java назначит его копия ссылки (созданной в передаче аргумента -> void modify( Foo foo ) {
) Но оригинальная, созданная до метода, останется нетронутой и, следовательно, все еще с Old foo
.