2016-01-29 2 views
3

Почему у меня возникла ошибка The local variable arcType may not have been initialized?Ошибка инициализации строки

первый случай:

String arcType; 

if (//somecondition) { 
arcType += "Test";  // Here it show the error 
System.out.println(arcType); 
} 

Но ниже рабочего штрафа.

второй случай:

String arcType = null; 

if (//somecondition) { 
arcType += "Test";  // It's working fine 
System.out.println(arcType); 
} 

Output of the above program : nullTest 

Если я инициализировать мой String с space затем space СЦЕПИТЬ с Test. Использование обрезки будет удалено, но я не хочу использовать обрезку.

Мой вопрос являются:

  1. Почему я получил The local variable arcType may not have been initialized ошибку в первом случае?

  2. Во втором случае, когда я инициализировал свою строку null, то почему я получил вывод nullTest?

Я хочу выход только Test.

+1

Локальные переменные не имеют значения по умолчанию – iMBMT

+1

Инициализируйте свою строку правильно, 'String arcType =" ";' Также строки неизменяемы. Каждый раз, когда вы делаете изменения в любой String, он создает новую String. Вы должны использовать StringBuilder. – user2004685

ответ

1

Затем вы должны инициализировать с пустым:

String arcType = ""; 

Внутренних методы, все объявленное переменные должны быть инициализированы перед использованием.

Null также является значением, поэтому, когда вы ссылаетесь на String на null и уступаете ему, он будет использовать значение null + concate.

4

1- Только член & переменные класса инициализируются по умолчанию. Местные переменных нет.

2- toString() называется неявно, если переданный объект не является null. Если это так, вместо этого печатается буква "null". Итак, чтобы получить "Test" в качестве вывода, вам нужно инициализировать вашу строку пустым.

Из документов: Objects#toString()

возвращает результат вызова ToString для ненулевого аргумента и «нуля» для нулевого аргумента.

0
  1. Йиу получают ошибку, как это все тоже says- переменная не может быть инициализирована (если условие ложно это привычка)

  2. += оператор является синтаксически s = s + "test".Поскольку первоначально S равен нуль, вы будете получать `нуля +«тест»

Вы должны инициализировать с опустошить string`

0

Во-первых, перед началом работы на любом переменном вы отформатируйте ее, даже если вы его инициализацию с нулем в порядке. Но он должен быть инициализирован.

Во-вторых, если мы прочитаем java-документ, мы найдем, что когда строка будет инициализирована нулем, и если мы назовем его соединением или +, это будет иметь нулевое значение. «возвращает новую строку, состоящий из копий элементов CharSequence соединяются вместе с копией указанного разделителя

Например, Строка сообщения = string.join (.» -»,„Java“,„есть“, «cool»); // Возвращенное сообщение: «Java-is-cool» Обратите внимание, что если элемент имеет значение null, то добавляется «null».

Если вы не хотите, чтобы нуль был добавлен, инициализируйте строку с пустым значением, например String arcType = "";

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