java -d64 -Xms512m -Xmx4g HelloWorld
где, -d64: активирует 64-битный JVM -Xms512m: установит размер начальной кучи как 512 МБ -Xmx4g: установит максимальный размер кучи как 4 GB (здесь имя java-файла: HelloWorld.java)
Я всегда использовал следующее:
If Request.QueryString("MyQueryString") IsNot Nothing Then
, Но только потому, что синтаксически это читает лучше.
При тестировании на допустимую запись QueryString я также использую следующее:
If Not String.IsNullOrEmpty(Request.QueryString("MyQueryString")) Then
Это просто методы, которые я всегда использовал так, я не мог выровнять по ширине их использование кроме, они имеют большую часть смысла мне при чтении назад кода.
Is
не то же, поскольку =
- Is
сравнивает ссылки, пока =
сравнит значения.
, Если Вы используете v2.Net Framework (или позже), существует IsNot
оператор, который будет делать правильную вещь и читать более естественно.
Я думаю, что Ваш вопрос сводится к "различию между (Is
и =
) и также (IsNot
и <>)".
ответ в обоих случаях является тем же:
=
и <>
неявно определяются для типов значения, и можно явно определить их для типов.
Is
и IsNot
разработаны для сравнений между ссылочными типами, чтобы проверить, относятся ли эти две ссылки к тому же объекту.
В Вашем примере, Вы ни с Чем сравниваете строковый объект (Пустой указатель) и начиная с =
/ <>
, операторы определяются для строк, первых работ в качестве примера. Однако это не работает, когда с Пустым указателем встречаются, потому что Строки являются ссылочными типами и могут быть Пустыми. Лучшим путем (как Вы предположили) является последняя версия с помощью Is
/ IsNot
.
Вот технический ответ (подробно останавливающийся на ответе Rowland Shaw).
Эти проверки ключевого слова, являются ли эти два операнда ссылками на ту же объектную память, и только возвращает true, если это верно. Я полагаю, что это функционально эквивалентно Объект. ReferenceEquals. ключевое слово IsNot является просто кратким синтаксисом для записи Not ... Is ...
, ничто больше.
= (равенство) оператор сравнивает значения, и в этом случае (как во многих других) эквивалентно Строка. Равняется . Теперь, <> (неравенство) оператор действительно не совсем имеет ту же аналогию, как эти и ключевые слова IsNot , так как это может быть переопределено отдельно от = оператор в зависимости от класса. Я полагаю, что случай должен всегда быть то, что это возвращает логическую инверсию = оператор (и конечно в случае Строки), и просто допускает более эффективное сравнение со сделанным при тестировании на неравенство, а не равенство.
При контакте со строками, если Вы на самом деле не означаете сравнивать ссылки, всегда использование = оператор (или Строка. Равняется я предполагаю). В Вашем случае, потому что Вы тестируете на пустой указатель ( Ничто ), кажется, что необходимо использовать эти , , или ключевое слово IsNot (оператор равенства перестанет работать, потому что он не может сравнить значения несуществующих объектов). Синтаксически, ключевое слово IsNot немного более хорошо здесь, поэтому пойдите с этим.
Просто используйте который звуки лучше. Я использовал бы первый подход, тем не менее, потому что это, кажется, начинает меньше операций.
Если необходимо знать, существует ли переменная использование Is/IsNot Ничто.
Используя <> требует, чтобы переменная, которую Вы оцениваете, имела "<>" оператор определяется. Выезд
Dim b As HttpContext
If b <> Nothing Then
...
End If
и результирующая погрешность
Error 1 Operator '<>' is not defined for types 'System.Web.HttpContext' and 'System.Web.HttpContext'.
На самом деле Is действительно хорош, так как разработчикам вы можете переопределить оператор ==, чтобы сравнить со значением. скажем, у вас есть класс A, оператор == из A, чтобы сравнить некоторые поля A с параметром. тогда у вас будут проблемы в c #, чтобы проверить, является ли объект A нулевым, с помощью следующего кода,
A a = new A();
...
if (a != null)
it will totally wrong, you always need to use if((object)a != null)
but in vb.net you cannot write in this way, you always need to write
if not a is nothing then
or
if a isnot nothing then
, который, как сказал Кристиан, vb.net ничего не «ожидал».
Компиляторы C # и VB.NET часто генерируют разные IL для операций, которые явно эквивалентны на обоих языках . Так уж получилось, что C # делает «ожидаемый» вещь, когда вы пишете stringvar == null
, но VB.NET этого не делает. Чтобы получить тот же эффект в VB.NET, вы должны принудительно установить истинное равенство ссылок с помощью оператора Is
.