2014-12-30 3 views
-1

У меня есть статический метод, который просто сравнивает два значения и возвращает результатСравнение значений с помощью == оператора

public class Calculator 
{ 
    public static bool AreEqual(object value1, object value2) 
    { 
     return value1 == value2; 
    } 

} 

bool Equal = Calculator.AreEqual("a", "a"); // returns true 
bool Equal = Calculator.AreEqual(1, 1); // returns false 

Может кто-то пожалуйста, объясните, что происходит за кулисами, который производит вывод, описанный выше

ответ

1

Время выполнения идентифицирует ваши литературные применения "a" и извлекает ту же ссылку на все эти обычаи, в результате чего один строковый объект вместо двух, как и следовало ожидать.

Вместо того чтобы использовать литералы, попробуйте следующее:

string A1 = new string(new char[] {'a'}); 
string A2 = new string(new char[] {'a'}); 

Calculator.AreEqual(A1, A2); // returns false 

Что вы представили здесь, как известно, как строка интернирование.
Дополнительную информацию можно найти на странице метода String.Intern.

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