C # - Найти выход

2

У меня есть следующий код С# ниже.

Object first = 5; 
Object second = 10; 
second = first;
Console.WriteLine(first + "    " + second);


 Object a = 3; 
 Object b = a; 
 a = 6;
 Console.WriteLine(a + "    " + b);

Я получаю следующий вывод:

5 5
6 3

На самом деле я ожидаю, что "6 6" будет вторым. Может ли кто-нибудь объяснить, где я ошибаюсь?

С уважением, Джастин Самуил.

  • 1
    Хороший вопрос к вступительным экзаменам
Теги:
reference

5 ответов

4
Лучший ответ

Линия

a = 6;

присваивает a ссылку на встроенный int new.
b продолжает ссылаться на значение (3), которое было помещено в бокс ранее.

1

Каждая переменная Object будет содержать int, которая является типом значения. a и b будут два разных экземпляра, поэтому изменение значения a (что по существу означает, что ссылка a ссылается на новый экземпляр int) не изменит значение b. Вы можете изменить свой первый пример кода, чтобы получить аналогичный результат:

Object first = 5; 
Object second = 10; 
second = first;
first = 8;
Console.WriteLine(first + "    " + second); // prints "8    5"
  • 1
    Он не меняет (целое) значение a но делает ссылку другой объекта. a
  • 0
    @Henk: да, это более четкий способ выразить это.
Показать ещё 1 комментарий
1

Целые значения - это типы значений, а не ссылки.

Когда вы пишете этот

object a = 3;
object b = a;

вы назначаете значение 3 в b. Впоследствии, при

a = 6;

вы присваиваете значение 6 а, а b не влияет, потому что ему было присвоено значение 3.

  • 0
    Но a и b являются ссылками (на упакованные целые числа).
0

Когда вы устанавливаете a = 6, его единственная настройка a, b остается 3. (это ожидалось)

0
static unsafe void Main()
    {

        Object first = 5;
        Object second = 10;
        second = first;
        Console.WriteLine(first + "    " + second);

        int i = 3;
        int y = 6;
        int* a = &i;
        int** b = &a;
        a = &y;
        Console.WriteLine(*a + "    " + **b);}

выполнить/небезопасно

5    5
6    6

:-). я бы не рекомендовал писать код таким образом, хотя =)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню