Разница между == и equа меня немного смутила, пока я не решил поближе рассмотреть ее. Многие из них говорят, что для сравнения строки вы должны использовать equals
, а не ==
. Надеюсь, что в этом ответе я смогу сказать разницу.
Лучший способ ответить на этот вопрос будет, задав несколько вопросов самому себе. так что давайте начнем:
. Каков результат для следующей программы:
String mango = "mango";
String mango2 = "mango";
System.out.println(mango != mango2);
System.out.println(mango == mango2);
, если вы говорите,
false
true
Я скажу, что вы right , но почему вы так сказали? и если вы говорите, что выходной сигнал,
true
false
Я скажу, что вы ошибочны , но я все равно спрошу вас, почему вы думаете, что это правильно?
Хорошо, попробуем ответить на этот вопрос:
Каков выход для следующей программы:
String mango = "mango";
String mango3 = new String("mango");
System.out.println(mango != mango3);
System.out.println(mango == mango3);
Now Если вы говорите,
false
true
Я скажу, что вы ошибочны , но почему это неправильно сейчас? правильным выходом для этой программы является
true
false
. Пожалуйста, сравните вышеуказанную программу и попытайтесь об этом подумать.
Хорошо. Теперь это может помочь (пожалуйста, прочтите следующее: напечатать адрес объекта - невозможно, но мы все же можем его использовать.)
String mango = "mango";
String mango2 = "mango";
String mango3 = new String("mango");
System.out.println(mango != mango2);
System.out.println(mango == mango2);
System.out.println(mango3 != mango2);
System.out.println(mango3 == mango2);
// mango2 = "mang";
System.out.println(mango+" "+ mango2);
System.out.println(mango != mango2);
System.out.println(mango == mango2);
System.out.println(System.identityHashCode(mango));
System.out.println(System.identityHashCode(mango2));
System.out.println(System.identityHashCode(mango3));
можете ли вы просто попытаться подумать о вывод последних трех строк в приведенном выше коде: для меня ideone напечатал это ( вы можете проверить здесь код ):
false
true
true
false
mango mango
false
true
17225372
17225372
5433634
О! Теперь вы видите, что идентификаторHashCode (манго) равен идентификаторуHashCode (mango2). Но он не равен identityHashCode (mango3)
. Хотя все строковые переменные - mango, mango2 и mango3 - имеют одинаковое значение, который является «манго», identityHashCode()
все еще не является одинаковым для всех.
Теперь попробуйте раскомментировать эту строку // mango2 = "mang";
и запустите его снова, на этот раз вы увидите, что все три identityHashCode()
отличаются друг от друга. Хм, это полезный намек
, мы знаем, что если hashcode(x)=N
и hashcode(y)=N
=> x is equal to y
, я не уверен, как java работает внутри, но я предполагаю, что это то, что произошло, когда я сказал:
mango = "mango";
java создал строку "mango"
, которая была указана (указана) переменной mango
примерно так
mango ----> "mango"
Теперь в следующая строка, когда я сказал:
mango2 = "mango";
На самом деле она повторно использовала ту же строку "mango"
, которая выглядит примерно так
mango ----> "mango" <---- mango2
И манго, и манго2, указывающие на ту же ссылку Теперь когда я сказал
mango3 = new String("mango")
Фактически он создал совершенно новую ссылку (строку) для «манго». который выглядит примерно так:
mango -----> "mango" <------ mango2
mango3 ------> "mango"
, и поэтому, когда я выставляю значения для mango == mango2
, он выдает true
. и когда я вытащил значение для mango3 == mango2
, он выпустил false
(даже если значения были одинаковыми).
и когда вы раскоментировали строку // mango2 = "mang";
, она фактически создала строку " mang ", который повернул наш график следующим образом:
mango ---->"mango"
mango2 ----> "mang"
mango3 -----> "mango"
Вот почему идентификаторHashCode для всех не одинок.
Надеюсь, это поможет вам, ребята. На самом деле, я хотел создать тестовый пример, где == fail и equals (). Пожалуйста, не стесняйтесь комментировать и дайте мне знать. Если я ошибаюсь.
Я знаю, что Graphcis32 использовался для реализации подобного Visio схематического изображения. На 'прикладной странице существует ссылка на MindVisualizer, доказывая, что это может использоваться для интеллект-карт также. Не out-of-the-box решение, хотя....
Studio Схемы TMS, как уже упомянуто, и DevExpress OrgChart или FlowChart могут добиться цели.
Вы могли бы хотеть взглянуть на Studio Схемы программного обеспечения TMS, не конкретно компонент схемы выражения идей, но он действительно предлагает функциональность схематического изображения в Вашем приложении Дельфи. и лицензия разработчика действительно идет с исходным кодом.
Как бывший разработчик Delphi, я симпатизирую. Это раньше было, что Вы могли найти свободный компонент с источником для примерно чего-либо. Вы, вероятно, знаете о Delphi Супер Страницу (мой старый дежурный источник для всего Delphi). Я смотрел; никакие компоненты схемы выражения идей, там. (Конечно, сайт не был обновлен приблизительно за 2 года).
У меня действительно есть предложение, тем не менее, но это не оптимально: StarUML был записан в Delphi, и он содержит пользовательские компоненты для создания диаграмм UML. Источник доступен для скачивания, и мне кажется, что примитивы UML (поля, строки, облака и такой) могли быть адаптированы к Вашей цели. Веб-сайтом является http://staruml.sourceforge.net/en/.
Я знаю, что это не идеально, но по крайней мере Вы не должны были бы запускать с нуля.
Удачи!
Другим большим источником для компонента Delphi является torry.net. При поиске там я нашел интересно выглядящий компонент: Графические объекты.
Не точно, что Вы ищете, но это могла быть опция, если Вы не можете найти собственный компонент VCL.
Древовидный GX http://www.componentsource.com/products/treegx/index-gbp.html является компонентом интеллект-карты.NET с исходным кодом.
Вы могли затем использовать Гидру http://www.remobjects.com/product/? идентификатор = {B6BD1030-F630-4DA8-9018-73C03265A0EF} от RemObects для хостинга управления WinForms в приложении Delphi при движении чистого .NET не является опцией.
Править: предварительный просмотр кажется показу ссылок хорошо, но когда я отправляю сообщение, они неправы, таким образом, я должен был поместить встроенные URL
Steema Software имеет большой компонент под названием TeeTree, который, кажется, делает все. Я не уверен, сколько это стоит (затраты действующее слово),
Мы используем его для того, чтобы сделать круговые диаграммы и отчеты, но это, кажется, делает все, можно получить скомпилированную демонстрацию от их сайта.
Это - компонент VCL.
Я знаю только один компонент отображения разума: MetaTree . Он поддерживает Delphi 5, 6, 7 и 2005 и поставляется с полным исходным кодом.