2014-01-16 2 views
2

Я прочитал некоторый код здесь: Is Java "pass-by-reference" or "pass-by-value"?Java - Передавать по ссылке для объекта Байт

public void foo(Dog d) 
{ 
    d.getName().equals("Max"); // true 
    d.setName("Fifi"); 
} 

Dog aDog = new Dog("Max"); 
foo(aDog); 
aDog.getName().equals("Fifi"); // true 

Могу ли я выполнить то же самое с Byte объекта. Я нахожусь в этом пункте в своем коде и задаюсь вопросом, как «установить» значение байтового объекта?

Если я использую оператор присваивания =, то он выполняет new Byte() autoboxing ?! и поэтому значение не возвращается.

Любые идеи? С уважением.

+3

Java ** передается по значению **. И поскольку 'Byte' является неизменным, вы не можете изменить его значение. –

+1

Возможно, я просто очень плотный, но где здесь используется «Byte»? –

+0

@DennisMeng Я гипотетически заменил класс Dog классом Byte в примере кода. Это не работает. –

ответ

6

Byte является неизменным, что означает, что его значение не может быть изменено. Присвоение ему не будет работать в вашем случае, так как это просто вернет ссылку (которая не будет передаваться обратно вызывающему абоненту).

Вы можете использовать MutableByte, массив из одного элемента byte/Byte или пользовательский класс.

+0

Спасибо. Вместо этого я принял решение использовать одноэлементный байтовый массив. –

+0

Спасибо за 'MutableByte', никогда не знала, что это в обычном лагере. –

-2

Предыдущий ответ правильный, но просто для добавления - да в этом случае объект Byte передается по ссылке. Однако, поскольку объект Byte неизменен, хотя он передан по ссылке, нет возможности его модифицировать.

Чтобы быть более конкретным, когда вы вызываете функцию, параметры в функцию передаются по значению, но при передаче объекта то, что вы фактически передаете по значению, является ссылкой на этот объект.

+0

Нет его передачи по значению http://www.javaranch.com/campfire/StoryPassBy.jsp – stackoverflow

+3

Нет, это ** не ** проходит по ссылке. Когда-либо. –

+2

Java НЕ проходит по ссылке! –

Смежные вопросы