Рубрики
Без рубрики

10 Самых Часто Задаваемых Вопросов О Java

Разработчики и новички часто застревают в своей карьере Java-разработчика, и для каждой работы нужен ace… Помеченный java.

Разработчики и новички часто застревают в своей карьере Java-разработчика, и для освоения каждой работы требуются определенные усилия и практика. Разработчики часто задают вопросы своей команде или общественности для получения решений. Как разработчики Java, они сталкиваются с тысячами проблем каждый день. Эта проблема может быть критической или незначительной.

Java – это объектно-ориентированный язык программирования общего назначения. Для разработчика Java или любого другого разработчика ошибки продолжают возникать. Чаще всего программисты сталкиваются с такими ошибками во время практики или экспериментов.

Итак, мы составили список наиболее часто задаваемых вопросов о Java, чтобы помочь вам, ребята. Вот список вопросов о Java.

10 Самых Часто Задаваемых Вопросов О Java

Если вы также являетесь разработчиком Java, и если вы также сталкивались с ошибками при кодировании, и если у вас есть какие-то вопросы о Java, то, пожалуйста, сначала ознакомьтесь с решениями, приведенными ниже. Приведенные ниже вопросы о Java описаны с использованием наилучших возможных решений.

1. Является ли Java “передачей по ссылке” или “передачей по значению”?

Ответ:

Java всегда передается по значению . К сожалению, когда мы передаем значение объекта, мы передаем ссылку на него. Это сбивает с толку начинающих, так как эти вопросы о java часто задают новички, и это выглядит следующим образом:

public static void main(String[] args) {
    Dog aDog = new Dog("Max");
    Dog oldDog = aDog;

    // we pass the object to foo
    foo(aDog);
    // aDog variable is still pointing to the "Max" dog when foo(...) returns
    aDog.getName().equals("Max"); // true
    aDog.getName().equals("Fifi"); // false
    aDog == oldDog; // true
}

public static void foo(Dog d) {
    d.getName().equals("Max"); // true
    // change d inside of foo() to point to a new Dog instance "Fifi"
    d = new Dog("Fifi");
    d.getName().equals("Fifi"); // true
}

В приведенном выше примере aDog.getName() все равно вернет "Max" . Значение аДог внутри main не изменяется в функции foo с помощью Dog "Fifi" , поскольку ссылка на объект передается по значению. Если бы он был передан по ссылке, то aDog.getName() в main вернул бы "Fifi" после вызова foo .

Также:

public static void main(String[] args) {
    Dog aDog = new Dog("Max");
    Dog oldDog = aDog;

    foo(aDog);
    // when foo(...) returns, the name of the dog has been changed to "Fifi"
    aDog.getName().equals("Fifi"); // true
    // but it is still the same dog:
    aDog == oldDog; // true
}

public static void foo(Dog d) {
    d.getName().equals("Max"); // true
    // this changes the name of d to be "Fifi"
    d.setName("Fifi");
}

В приведенном выше примере Фифи – это имя собаки после вызова |/foo(собака) потому что имя объекта было задано внутри foo(…) . Любые операции, которые food выполняет над d , таковы, что для всех практических целей они выполняются над собакой , но невозможно изменить значение переменной собака сама по себе.

Дополнительный Ответ:

В спецификации Java говорится, что все в Java передается по значению. В Java нет такого понятия, как “передача по ссылке”.

Ключом к пониманию этого является то, что что-то вроде

Dog myDog;

это не Собака; на самом деле это указатель на Собаку.

Что это значит, так это то, что у вас есть

Dog myDog = new Dog("Rover");
foo(myDog);

по сути, вы передаете адрес созданного объекта Dog методу foo .

Предположим, что объект Dog находится по адресу памяти 42. Это означает, что мы передаем 42 методу.

если бы Метод был определен как

public void foo(Dog someDog) {
    someDog.setName("Max");     // AAA
    someDog = new Dog("Fifi");  // BBB
    someDog.setName("Rowlf");   // CCC
}

Давайте посмотрим, что происходит.

  • параметр некоторая собака установлена на значение 42
  • в строке “AAA”
    • за некоторой собакой следует Собака , на которую она указывает (объект Собака по адресу 42)
    • эту Собаку (ту, что по адресу 42) просят сменить имя на Макс
  • в строке “BBB”
    • создается новая Собака . Допустим, он находится по адресу 74
    • мы присваиваем параметр someDog до 74
  • в строке “CCC”
    • за некоторой собакой следует Собака , на которую она указывает (объект Собака по адресу 74)
    • этого Пса (того, что по адресу 74) просят сменить его имя на Роулф
  • затем, мы возвращаемся

Теперь давайте подумаем о том, что происходит за пределами метода:

Сделал моя Собака измениться?

Вот ключ.

Имея в виду, что my Dog – это указатель, а не фактическая Dog , ответ – НЕТ. моя собака по-прежнему имеет значение 42; она по-прежнему указывает на исходную Собаку/| (но обратите внимание, что из–за строки “AAA” ее имя теперь “Max” – все та же собака; значение myDog не изменилось.)

Вполне допустимо следовать по адресу и изменять то, что находится в его конце; однако это не меняет переменную.

Java работает точно так же, как C. Вы можете назначить указатель, передать указатель методу, следовать указателю в методе и изменять данные, на которые были указаны. Однако вы не можете изменить, куда указывает этот указатель.

В C++, Ada, Pascal, m и других языках, поддерживающих передачу по ссылке, вы действительно можете изменить переданную переменную.

Если бы в Java была семантика передачи по ссылке, метод foo , который мы определили выше, изменил бы то, на что указывал myDog , когда он назначал какая-то собака на линии ВВВ.

Думайте о ссылочных параметрах как о псевдонимах для передаваемой переменной. Когда этот псевдоним присваивается, то же самое относится и к переменной, которая была передана.

2. Как прочитать/преобразовать входной поток в строку в Java?

Ответ:

Хороший способ сделать это – использовать Apache commons IOUtils для копирования Входной поток в StringWriter , что-то вроде

StringWriter writer = new StringWriter();
IOUtils.copy(inputStream, writer, encoding);
String theString = writer.toString();

или даже

// NB: does not close inputStream, you'll have to use try-with-resources for that
String theString = IOUtils.toString(inputStream, encoding); 

даже в качестве альтернативы вы могли бы использовать ByteArrayOutputStream даже в качестве альтернативы вы могли бы использовать

даже в качестве альтернативы вы могли бы использовать || ByteArrayOutputStream, если вы не хотите смешивать свои потоки и писать дополнительный ответ:

даже в качестве альтернативы вы могли бы использовать || ByteArrayOutputStream, если вы не хотите смешивать свои потоки и писать Дополнительный ответ: Кроме того, существуют различные способы преобразования InputStream в строку в Java

  • даже в качестве альтернативы вы могли бы использовать ByteArrayOutputStream, если вы не хотите смешивать свои потоки и писать Дополнительный ответ: Кроме того, существуют различные способы преобразования InputStream в строку в Java с помощью Долговые расписки.toString
String result = IOUtils.toString(inputStream, StandardCharsets.UTF_8);
  • даже в качестве альтернативы вы могли бы использовать ByteArrayOutputStream, если вы не хотите смешивать свои потоки и писать Дополнительный ответ: Кроме того, существуют различные способы преобразования InputStream в строку в Java с помощью Долговые расписки.toString
String result = CharStreams.toString(new InputStreamReader(
          inputStream, Charsets.UTF_8));
  • даже в качестве альтернативы вы могли бы использовать ByteArrayOutputStream, если вы не хотите смешивать свои потоки и писать Дополнительный ответ: Кроме того, существуют различные способы преобразования InputStream в строку в Java с помощью Долговые расписки.toString
Scanner s = new Scanner(inputStream).useDelimiter("\\A");
    String result = s.hasNext() ? s.next() : "";
  • даже в качестве альтернативы вы могли бы использовать ByteArrayOutputStream, если вы не хотите смешивать свои потоки и писать Дополнительный ответ: Кроме того, существуют различные способы преобразования InputStream в строку в Java с помощью Долговые расписки.toString (ApacUsing CharStreams (Guava) he Utils) С использованием Scanner (JDK) С использованием Stream API
String result = new BufferedReader(new InputStreamReader(inputStream))
      .lines().collect(Collectors.joining("\n"));
  • даже в качестве альтернативы вы могли бы использовать ByteArrayOutputStream, если вы не хотите смешивать свои потоки и писать Дополнительный ответ: Кроме того, существуют различные способы преобразования InputStream в строку в Java с помощью Долговые расписки.toString (ApacUsing CharStreams (Guava) he Utils) С использованием Scanner (JDK) С использованием Stream API
String result = new BufferedReader(new InputStreamReader(inputStream)).lines()
       .parallel().collect(Collectors.joining("\n"));
  • даже в качестве альтернативы вы могли бы использовать ByteArrayOutputStream, если вы не хотите смешивать свои потоки и писать Дополнительный ответ: Кроме того, существуют различные способы преобразования InputStream в строку в Java с помощью Долговые расписки.toString (ApacUsing CharStreams
 final int bufferSize = 1024;
    final char[] buffer = new char[bufferSize];
    final StringBuilder out = new StringBuilder();
    Reader in = new InputStreamReader(stream, StandardCharsets.UTF_8);
    int charsRead;
    while((charsRead = in.read(buffer, 0, buffer.length)) > 0) {
        out.append(buffer, 0, charsRead);
    }
    return out.toString();
  • даже в качестве альтернативы вы могли бы использовать ByteArrayOutputStream, если вы не хотите смешивать свои потоки и писать Дополнительный ответ: Кроме того, существуют различные способы преобразования InputStream в строку в Java с помощью Долговые расписки.toString (ApacUsing CharStreams
StringWriter writer = new StringWriter();
    IOUtils.copy(inputStream, writer, "UTF-8");
    return writer.toString();
  • даже в качестве альтернативы вы могли бы использовать ByteArrayOutputStream, если вы не хотите смешивать свои потоки и писать Дополнительный ответ: Кроме того, существуют различные способы преобразования InputStream в строку в Java с помощью Долговые расписки.toString (ApacUsing CharStreams
ByteArrayOutputStream result = new ByteArrayOutputStream();
    byte[] buffer = new byte[1024];
    int length;
    while ((length = inputStream.read(buffer)) != -1) {
        result.write(buffer, 0, length);
    }
    // StandardCharsets.UTF_8.name() > JDK 7
    return result.toString("UTF-8");
  • даже в качестве альтернативы вы могли бы использовать ByteArrayOutputStream, если вы не хотите смешивать свои потоки и писать Дополнительный ответ: Кроме того, существуют различные способы преобразования InputStream в строку в Java с помощью Долговые расписки.toString (ApacUsing CharStreams (Guava) he Utils) С использованием Scanner (JDK) С использованием Stream API
String newLine = System.getProperty("line.separator");
    BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
    StringBuilder result = new StringBuilder();
    boolean flag = false;
    for (String line; (line = reader.readLine()) != null; ) {
        result.append(flag? newLine: "").append(line);
        flag = true;
    }
    return result.toString();
  • даже в качестве альтернативы вы могли бы использовать ByteArrayOutputStream, если вы не хотите смешивать свои потоки и писать Дополнительный ответ: Кроме того, существуют различные способы преобразования InputStream в строку в Java с помощью Долговые расписки.toString (ApacUsing CharStreams
BufferedInputStream bis = new BufferedInputStream(inputStream);
    ByteArrayOutputStream buf = new ByteArrayOutputStream();
    int result = bis.read();
    while(result != -1) {
        buf.write((byte) result);
        result = bis.read();
    }
    // StandardCharsets.UTF_8.name() > JDK 7
    return buf.toString("UTF-8");
  • даже в качестве альтернативы вы могли бы использовать ByteArrayOutputStream, если вы не хотите смешивать свои потоки и писать Дополнительный ответ: Кроме того, существуют различные способы преобразования InputStream в строку в Java с помощью Долговые расписки.toString (ApacUsing CharStreams (Guava) he Utils) С использованием Scanner
int ch;
    StringBuilder sb = new StringBuilder();
    while((ch = inputStream.read()) != -1)
        sb.append((char)ch);
    reset();
    return sb.toString();

даже в качестве альтернативы вы могли бы использовать ByteArrayOutputStream, если вы не хотите смешивать свои потоки и писать Дополнительный ответ: Кроме того, существуют различные способы преобразования InputStream в строку в Java с помощью

  • даже в качестве альтернативы вы могли бы использовать
  • ByteArrayOutputStream, если вы не хотите смешивать свои потоки и писать Дополнительный ответ: Кроме того, существуют различные способы преобразования InputStream в строку в Java с помощью

даже в качестве альтернативы вы могли бы использовать || ByteArrayOutputStream, если вы не хотите смешивать свои потоки и писать Дополнительный ответ: Кроме того, существуют различные способы преобразования InputStream в строку в Java с помощью || Долговые расписки.toString || (ApacUsing || CharStreams || (Guava) he Utils) С использованием || Scanner || (JDK) С использованием || Stream API || (Java 8). Предупреждение ||: Это решение преобразует различные разрывы строк (например, || \r\n || ) В предупреждение ||: Это решение преобразует различные разрывы строк (например, || С помощью || InputStreamReader || \r\n || ) в || \n || . (Java 8). Использование || С использованием || ByteArrayOutputStream || (ApacheWarning ||: Это решение преобразует различные разрывы строк (например, || С использованием || \n\ r || ) в || line.separator || системное свойство (foPerformance tests Решение 11 не может корректно работать с текстовыми решениями Unicode 4, 5, и 9 преобразуют разные разрывы строк в один. Предупреждение ||: Предупреждение ||: Это решение имеет проблемы с Юникодом, например, с русским текстом (корректно работает только с текстом, отличным от Юникода), используя || InputStream.read() || и || StringBuilder || (JDK). || (JDK) и || ByteArrayOutputStream BufferedInputStream (например, в Windows на “\r\n”). Используя || BufferedReader || (JDK). InputStream.read || (JDK) и || Commons) и || IOUtils.скопируйте StringWriter || С помощью || и || StringBuilder || (JDK) parallel Stream API |/|| \n || .

даже в качестве альтернативы вы могли бы использовать ByteArrayOutputStream, если вы не хотите смешивать свои потоки и писать Дополнительный ответ: Кроме того, существуют различные способы преобразования InputStream в строку в Java с помощью Долговые расписки.toString

              Benchmark                         Mode  Cnt   Score   Error  Units
 8. ByteArrayOutputStream and read (JDK)        avgt   10   1,343 ± 0,028  us/op
 6. InputStreamReader and StringBuilder (JDK)   avgt   10   6,980 ± 0,404  us/op
10. BufferedInputStream, ByteArrayOutputStream  avgt   10   7,437 ± 0,735  us/op
11. InputStream.read() and StringBuilder (JDK)  avgt   10   8,977 ± 0,328  us/op
 7. StringWriter and IOUtils.copy (Apache)      avgt   10  10,613 ± 0,599  us/op
 1. IOUtils.toString (Apache Utils)             avgt   10  10,605 ± 0,527  us/op
 3. Scanner (JDK)                               avgt   10  12,083 ± 0,293  us/op
 2. CharStreams (guava)                         avgt   10  12,999 ± 0,514  us/op
 4. Stream Api (Java 8)                         avgt   10  15,811 ± 0,605  us/op
 9. BufferedReader (JDK)                        avgt   10  16,038 ± 0,711  us/op
 5. parallel Stream Api (Java 8)                avgt   10  21,544 ± 0,583  us/op

даже в качестве альтернативы вы могли бы использовать ByteArrayOutputStream, если вы не хотите смешивать свои потоки и писать Дополнительный ответ: Кроме того, существуют различные способы преобразования InputStream в строку в Java с помощью Долговые расписки.toString

               Benchmark                        Mode  Cnt   Score        Error  Units
 8. ByteArrayOutputStream and read (JDK)        avgt   10   200,715 ±   18,103  us/op
 1. IOUtils.toString (Apache Utils)             avgt   10   300,019 ±    8,751  us/op
 6. InputStreamReader and StringBuilder (JDK)   avgt   10   347,616 ±  130,348  us/op
 7. StringWriter and IOUtils.copy (Apache)      avgt   10   352,791 ±  105,337  us/op
 2. CharStreams (guava)                         avgt   10   420,137 ±   59,877  us/op
 9. BufferedReader (JDK)                        avgt   10   632,028 ±   17,002  us/op
 5. parallel Stream Api (Java 8)                avgt   10   662,999 ±   46,199  us/op
 4. Stream Api (Java 8)                         avgt   10   701,269 ±   82,296  us/op
10. BufferedInputStream, ByteArrayOutputStream  avgt   10   740,837 ±    5,613  us/op
 3. Scanner (JDK)                               avgt   10   751,417 ±   62,026  us/op
11. InputStream.read() and StringBuilder (JDK)  avgt   10  2919,350 ± 1101,942  us/op

даже в качестве альтернативы вы могли бы использовать || ByteArrayOutputStream, если вы не хотите смешивать свои потоки и писать Дополнительный ответ: Кроме того, существуют различные способы преобразования InputStream в строку в Java с помощью || Долговые расписки.toString || (ApacUsing || CharStreams || (Guava) he Utils) С использованием || Scanner || (JDK) С использованием || Stream API || (Java 8). Предупреждение ||: Это решение преобразует различные разрывы строк (например, || \r\n || ) В предупреждение ||: Это решение преобразует различные разрывы строк (например, || С помощью || InputStreamReader || \r\n || ) в || \n || . (Java 8). Использование || Использование || ByteArrayOutputStream || (ApacheWarning ||: Это решение преобразует различные разрывы строк (например, || С использованием || \n \ r || ) в || line.separator || системное свойство (F) (тесты производительности в зависимости от длины входного потока в системе Windows 7) Время,, оценка 200,715 является лучшим): Тесты производительности для больших || строк || ) Тесты производительности для малых || строк || ), Время,, оценка 1,343 является лучшим): Тесты производительности Решение 11 не может корректно работать с текстом Unicode Решения 4, 5 и 9 преобразуют другой разрыв строки на один. Предупреждение ||: Предупреждение ||: Это решение имеет проблемы с Юникодом, например, с русским текстом (корректно работает только с текстом, отличным от Юникода), используя || InputStream.read() || и || StringBuilder || (JDK). || (JDK) и || ByteArrayOutputStream BufferedInputStream (например, в Windows на “\r\n”). Используя || BufferedReader || (JDK). InputStream.read || (JDK) и || Commons) и || IOUtils.скопируйте StringWriter || С помощью || и || StringBuilder || (JDK) parallel Stream API |/|| \n || .

даже в качестве альтернативы вы могли бы использовать || ByteArrayOutputStream, если вы не хотите смешивать свои потоки и писать Дополнительный ответ: Кроме того, существуют различные способы преобразования InputStream в строку в Java с помощью || Долговые расписки.toString || (ApacUsing || CharStreams || (Guava) he Utils) С использованием || Scanner || (JDK) С использованием || Stream API || (Java 8). Предупреждение ||: Это решение преобразует различные разрывы строк (например, || \r\n || ) В предупреждение ||: Это решение преобразует различные разрывы строк (например, || С помощью || InputStreamReader || \r\n || ) в || \n || . (Java 8). Использование || С использованием || ByteArrayOutputStream || (ApacheWarning ||: Это решение преобразует различные разрывы строк (например, || С использованием || \n\ r || ) в || line.separator || системное свойство (проверка работоспособности (среднее время) в зависимости от длины входного потока в системе Windows 7: Графики (тесты производительности в зависимости от длины входного потока в системе Windows 7) Время,, оценка 200,715 является лучшим): Тесты производительности для больших || строк || ) Тесты производительности для малых || строк || ), Время,, оценка 1,343 является лучшим): Тесты производительности Решение 11 не может корректно работать с текстовыми решениями Unicode 4, 5, и 9 преобразуют разные разрывы строк в один. Предупреждение ||: Предупреждение ||: Это решение имеет проблемы с Юникодом, например, с русским текстом (корректно работает только с текстом, отличным от Юникода), используя || InputStream.read() || и || StringBuilder || (JDK). || (JDK) и || ByteArrayOutputStream BufferedInputStream (например, в Windows на “\r\n”). Используя || BufferedReader || (JDK). InputStream.read || (JDK) и || Commons) и || IOUtils.скопируйте StringWriter || С помощью || и || StringBuilder || (JDK) parallel Stream API |/|| \n || .

 length  182    546     1092    3276    9828    29484   58968

 test8  0.38    0.938   1.868   4.448   13.412  36.459  72.708
 test4  2.362   3.609   5.573   12.769  40.74   81.415  159.864
 test5  3.881   5.075   6.904   14.123  50.258  129.937 166.162
 test9  2.237   3.493   5.422   11.977  45.98   89.336  177.39
 test6  1.261   2.12    4.38    10.698  31.821  86.106  186.636
 test7  1.601   2.391   3.646   8.367   38.196  110.221 211.016
 test1  1.529   2.381   3.527   8.411   40.551  105.16  212.573
 test3  3.035   3.934   8.606   20.858  61.571  118.744 235.428
 test2  3.136   6.238   10.508  33.48   43.532  118.044 239.481
 test10 1.593   4.736   7.527   20.557  59.856  162.907 323.147
 test11 3.913   11.506  23.26   68.644  207.591 600.444 1211.545

3. даже в качестве альтернативы вы могли бы использовать || ByteArrayOutputStream, если вы не хотите смешивать свои потоки и писать Дополнительный ответ: Кроме того, существуют различные способы преобразования InputStream в строку в Java с помощью || Долговые расписки.toString || (ApacUsing || CharStreams || (Guava) he Utils) С использованием || Scanner || (JDK) С использованием || Stream API || (Java 8). Предупреждение ||: Это решение преобразует различные разрывы строк (например, || \r\n || ) В предупреждение ||: Это решение преобразует различные разрывы строк (например, || С помощью || InputStreamReader || \r\n || ) в || \n || . (Java 8). Использование || Использование || ByteArrayOutputStream || (ApacheWarning ||: Это решение преобразует различные разрывы строк (например, || С использованием || \n\ r || ) в || line.separator || системное свойство (Как избежать операторов? Тест производительности (среднее время) в зависимости от длины входного потока в системе Windows 7: Графики (тесты производительности в зависимости от длины входного потока в системе Windows 7) Время,, оценка 200,715 является лучшим): Тесты производительности для больших || строк || ) Тесты производительности для малых || строк || ), Время,, оценка 1,343 является лучшим): Тесты производительности Решение 11 не может корректно работать с текстом Unicode Решения 4, 5 и 9 преобразуют другой разрыв строки на один. Предупреждение ||: Предупреждение ||: Это решение имеет проблемы с Юникодом, например, с русским текстом (корректно работает только с текстом, отличным от Юникода), используя || InputStream.read() || и || StringBuilder || (JDK). || (JDK) и || ByteArrayOutputStream BufferedInputStream (например, в Windows на “\r\n”). Используя || BufferedReader || (JDK). InputStream.read || (JDK) и || Commons) и || IOUtils.скопируйте StringWriter || С помощью || и || StringBuilder || (JDK) parallel Stream API |/|| \n || .

даже в качестве альтернативы вы могли бы использовать || ByteArrayOutputStream, если вы не хотите смешивать свои потоки и писать Дополнительный ответ: Кроме того, существуют различные способы преобразования InputStream в строку в Java с помощью || Долговые расписки.toString || (ApacUsing || CharStreams || (Guava) he Utils) С использованием || Scanner || (JDK) С использованием || Stream API || (Java 8). Предупреждение ||: Это решение преобразует различные разрывы строк (например, || \r\n || ) В предупреждение ||: Это решение преобразует различные разрывы строк (например, || С помощью || InputStreamReader || \r\n || ) в || \n || . (Java 8). Использование || Использование || ByteArrayOutputStream || (ApacheWarning ||: Это решение преобразует различные разрывы строк (например, || С использованием || \n\r || ) в || line.separator || системное свойство (foAnswer: Как избежать операторов? Тест производительности (среднее время) в зависимости от длины входного потока в системе Windows 7: Графики (тесты производительности в зависимости от длины входного потока в системе Windows 7) Время,, оценка 200,715 является лучшим): Тесты производительности для больших || строк || ) Тесты производительности для малых || строк || ), Время,, оценка 1,343 является лучшим): Тесты производительности Решение 11 не может корректно работать с текстом Unicode Решения 4, 5 и 9 преобразуют другой разрыв строки на один. Предупреждение ||: Предупреждение ||: Это решение имеет проблемы с Юникодом, например, с русским текстом (корректно работает только с текстом, отличным от Юникода), используя || InputStream.read() || и || StringBuilder || (JDK). || (JDK) и || ByteArrayOutputStream BufferedInputStream (например, в Windows на “\r\n”). Используя || BufferedReader || (JDK). InputStream.read || (JDK) и || Commons) и || IOUtils.скопируйте StringWriter || С помощью || и || StringBuilder || (JDK) parallel Stream API |/|| \n || .

даже в качестве альтернативы вы могли бы использовать || ByteArrayOutputStream, если вы не хотите смешивать свои потоки и писать Дополнительный ответ: Кроме того, существуют различные способы преобразования InputStream в строку в Java с помощью || Долговые расписки.toString || (ApacUsing || CharStreams || (Guava) he Utils) С использованием || Scanner || (JDK) С использованием || Stream API || (Java 8). Предупреждение ||: Это решение преобразует различные разрывы строк (например, || \r\n || ) В предупреждение ||: Это решение преобразует различные разрывы строк (например, || С помощью || InputStreamReader || \r\n || ) в || \n || . (Java 8). Использование || С использованием || ByteArrayOutputStream || (ApacheWarning ||: Это решение преобразует различные разрывы строк (например, || С использованием || \ n \ r || ) в || line.separator || системное свойство (Есть два случая, когда возникает проверка null: Ответ: Как избежать заявления? Тест производительности (среднее время) в зависимости от длины входного потока в системе Windows 7: Графики (тесты производительности в зависимости от длины входного потока в системе Windows 7) Время,, оценка 200,715 является лучшим): Тесты производительности для больших || строк || ) Тесты производительности для малых || строк || ), Время,, оценка 1,343 является лучшим): Тесты производительности Решение 11 не может корректно работать с текстом Unicode Решения 4, 5 и 9 преобразуют другой разрыв строки на один. Предупреждение ||: Предупреждение ||: Это решение имеет проблемы с Юникодом, например, с русским текстом (корректно работает только с текстом, отличным от Юникода), используя || InputStream.read() || и || StringBuilder || (JDK). || (JDK) и || ByteArrayOutputStream BufferedInputStream (например, в Windows на “\r\n”). Используя || BufferedReader || (JDK). InputStream.read || (JDK) и || Commons) и || IOUtils.скопируйте StringWriter || С помощью || и || StringBuilder || (JDK) parallel Stream API |/|| \n || .

  • даже в качестве альтернативы вы могли бы использовать
  • ByteArrayOutputStream, если вы не хотите смешивать свои потоки и писать Дополнительный ответ: Кроме того, существуют различные способы преобразования InputStream в строку в Java с помощью

даже в качестве альтернативы вы могли бы использовать ByteArrayOutputStream, если вы не хотите смешивать свои потоки и писать Дополнительный ответ: Кроме того, существуют различные способы преобразования InputStream в строку в Java с помощью Долговые расписки.toString

assert 

даже в качестве альтернативы вы могли бы использовать || ByteArrayOutputStream, если вы не хотите смешивать свои потоки и писать Дополнительный ответ: Кроме того, существуют различные способы преобразования InputStream в строку в Java с помощью || Долговые расписки.toString || (ApacUsing || CharStreams || (Guava) he Utils) С использованием || Scanner || (JDK) С использованием || Stream API || (Java 8). Предупреждение ||: Это решение преобразует различные разрывы строк (например, || \r\n || ) В предупреждение ||: Это решение преобразует различные разрывы строк (например, || С помощью || InputStreamReader || \r\n || ) в || \n || . (Java 8). Использование || С использованием || ByteArrayOutputStream || (ApacheWarning ||: Это решение преобразует различные разрывы строк (например, || С использованием || \n\ r || ) в || line.separator || системное свойство (foAssertions – это часто недоиспользуемая функция Java, которая была добавлена в 1.4. Либо использовать || assert || утверждения (утверждения) или разрешить сбой (2) несложно. Там, где это неверный ответ. Где null является допустимым ответом с точки зрения контракта; и Есть два случая, когда возникает проверка null: Ответ: Как избежать утверждений? Тест производительности (среднее время) в зависимости от длины входного потока в системе Windows 7: Графики (тесты производительности в зависимости от длины входного потока в системе Windows 7) Время,, оценка 200,715 является лучшим): Тесты производительности для больших || строк || ) Тесты производительности для малых || строк || ), Время,, оценка 1,343 является лучшим): Тесты производительности Решение 11 не может корректно работать с текстом Unicode Решения 4, 5 и 9 преобразуют другой разрыв строки на один. Предупреждение ||: Предупреждение ||: Это решение имеет проблемы с Юникодом, например, с русским текстом (корректно работает только с текстом, отличным от Юникода), используя || InputStream.read() || и || StringBuilder || (JDK). || (JDK) и || ByteArrayOutputStream BufferedInputStream (например, в Windows на “\r\n”). Используя || BufferedReader || (JDK). InputStream.read || (JDK) и || Commons) и || IOUtils.скопируйте StringWriter || С помощью || и || StringBuilder || (JDK) parallel Stream API |/|| \n || .

assert  : 

где <условие> – логическое выражение, а <объект> – объект, выходные данные метода toString() будут включены в ошибку.

Оператор assert выдает ошибку (AssertionError) если условие неверно. По умолчанию Java игнорирует утверждения. По умолчанию Java игнорирует утверждения. -ea в JVM. Вы можете включать и отключать утверждения для отдельных классов и пакетов. Это означает, что вы можете проверять код с помощью утверждений во время разработки и тестирования и отключать их в рабочей среде, хотя мое тестирование практически не показало влияния утверждений на производительность.

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

(1) Немного сложнее. Если у вас нет контроля над кодом, который вы вызываете, то вы застряли. Если null является допустимым ответом, вы должны проверить его наличие.

Однако, если это код, который вы действительно контролируете (и это часто бывает), тогда это совсем другая история. Избегайте использования нулей в качестве ответа. С методами, которые возвращают коллекции, это просто: возвращайте пустые коллекции (или массивы) вместо нулей практически все время.

С не-коллекциями это может быть сложнее. Рассмотрим это в качестве примера: если у вас есть эти интерфейсы:

public interface Action {
  void doSomething();
}

public interface Parser {
  Action findAction(String userInput);
}

Где анализатор принимает необработанный пользовательский ввод и находит, что нужно сделать, возможно, если вы для чего-то реализуете интерфейс командной строки. Теперь вы можете заключить контракт, чтобы он возвращал значение null, если нет соответствующего действия. Это приводит к нулевой проверке, о которой вы говорите.

Альтернативным решением является никогда не возвращать значение null и вместо этого использовать шаблон объекта Null :

public class MyParser implements Parser {
  private static Action DO_NOTHING = new Action() {
    public void doSomething() { /* do nothing */ }
  };

  public Action findAction(String userInput) {
    // ...
    if ( /* we can't find any actions */ ) {
      return DO_NOTHING;
    }
  }
}

Сравнивать:

Parser parser = ParserFactory.getParser();
if (parser == null) {
  // now what?
  // this would be an example of where null isn't (or shouldn't be) a valid response
}
Action action = parser.findAction(someInput);
if (action == null) {
  // do nothing
} else {
  action.doSomething();
}

к

ParserFactory.getParser().findAction(someInput).doSomething();

это гораздо лучший дизайн, потому что он приводит к более сжатому коду.

Тем не менее, возможно, для метода find Action() вполне уместно выдавать исключение со значимым сообщением об ошибке — особенно в этом случае, когда вы полагаетесь на пользовательский ввод. Было бы гораздо лучше, если бы метод foundation выдал исключение, чем если бы вызывающий метод взорвался простым NullPointerException без каких-либо объяснений.

try {
    ParserFactory.getParser().findAction(someInput).doSomething();
} catch(ActionNotFoundException anfe) {
    userConsole.err(anfe.getMessage());
}

Или, если вы считаете, что механизм try/catch слишком уродлив, вместо того, чтобы ничего не делать, ваше действие по умолчанию должно обеспечивать обратную связь с пользователем.

public Action findAction(final String userInput) {
    /* Code to return requested Action if found */
    return new Action() {
        public void doSomething() {
            userConsole.err("Action not found: " + userInput);
        }
    }
}

4. Различия между HashMap и Hashtable?

Ответ:

В Java существует несколько различий между HashMap и Hashtable :

  • Хэш-таблица является синхронизированной , в то время как HashMap – нет. Это делает HashMap лучше для непоточных приложений, поскольку несинхронизированные объекты обычно работают лучше, чем синхронизированные.
  • Хэш-таблица не допускает null ключи или ценности. HashMap допускает один нулевой ключ и любое количество нулевых значений.
  • Одним из подклассов Hashmap является LinkedHashMap , поэтому в случае, если вам нужен предсказуемый порядок итераций (который по умолчанию является порядком вставки), вы можете легко заменить HashMap на LinkedHashMap . Это было бы не так просто, если бы вы использовали Hashtable .

Поскольку синхронизация для вас не является проблемой, то HashMap лучше. Если синхронизация становится проблемой, вы также можете посмотреть |/ConcurrentHashMap .

Дополнительный Ответ:

Очень распространенной идиомой является “check then put” — т.Е. Найдите запись в Map и добавьте ее, если она еще не существует. Это никоим образом не является атомарной операцией, независимо от того, используете ли вы Hashtable или HashMap .

Эквивалентно синхронизированная HashMap может быть получена с помощью:

Collections.synchronizedMap(myMap);

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

synchronized(myMap) {
    if (!myMap.containsKey("tomato"))
        myMap.put("tomato", "red");
}

Даже перебор записей Хэш-таблицы ‘ (или хэш-карты , полученной с помощью Коллекции.synchronizedMap ) не является потокобезопасным, если вы также не защищаете Map от изменения с помощью дополнительной синхронизации.

Реализации интерфейса ConcurrentMap (например ConcurrentHashMap ) частично решают эту проблему, включая потокобезопасную семантику проверки и последующего действия , такую как:

ConcurrentMap.putIfAbsent(ключ, значение);

5. Как и когда следует использовать UserManager.isUserAGoat()?

Ответ:

Из source метод , используемый для возврата false , пока он не был изменен в API 21.

/**
 * Used to determine whether the user making this call is subject to
 * teleportations.
 * @return whether the user making this call is a goat 
 */
public boolean isUserAGoat() {
    return false;
}

Похоже, что этот метод не имеет реальной пользы для нас, разработчиков.

В API 21 реализация была изменена, чтобы проверить, есть ли установленное приложение с пакетом com.coffeestainstudios.goatsimulator

/**
 * Used to determine whether the user making this call is subject to
 * teleportations.
 *
 * 

As of {@link android.os.Build.VERSION_CODES#LOLLIPOP}, this method can * now automatically identify goats using advanced goat recognition technology.

* * @return Returns true if the user making this call is a goat. */ public boolean isUserAGoat() { return mContext.getPackageManager() .isPackageAvailable("com.coffeestainstudios.goatsimulator"); }

6. Почему операторы присваивания Java +=, -=, *=, не требуют приведения?

Ответ:

В данном случае §15.26.2 Составные операторы присваивания . Выдержка:

Составное выражение присваивания вида E1 эквивалентно E1 = E1 эквивалентно E1 = (T)((E1) op (E2)) E1 эквивалентно E1 = (T)((E1) op (E2)) , где T является типом

E1 эквивалентно E1 = (T)((E1) op (E2))

short x = 3;
x += 4.6;

E1 || эквивалентно || E1 = (T)((E1) op (E2)) || , где || T || является типом || E1 || , за исключением того, что || E1 || вычисляется только один раз. Ошибки при отливке могут привести к критическому отказу. Пример приведен из || § 15.26.2 || и приводит к тому, что x имеет значение 7, поскольку оно эквивалентно: .

short x = 3;
x = (short)(x + 4.6);

E1 эквивалентно E1 = (T)((E1) op (E2)) , где T

7. E1 || эквивалентно || E1 = (T)((E1) op (E2)) || , где || T || является типом || E1 || , за исключением того, что || E1 || вычисляется только один раз. Ошибки при отливке могут привести к критическому отказу. Пример приведен из || § 15.26.2 || и приводит к тому, что x имеет значение 7, поскольку оно эквивалентно: . Другими словами, || i; || – это ярлык для || i =(тип i) (i + j) || . Как создать ArrayList из массива?

E1 || эквивалентно || E1 = (T)((E1) op (E2)) || , где || T || является типом || E1 || , за исключением того, что || E1 || вычисляется только один раз. Ошибки при отливке могут привести к критическому отказу. Пример приведен из || § 15.26.2 || и приводит к тому, что x имеет значение 7, поскольку оно эквивалентно: . Другими словами, || i; || – это ярлык для || i =(тип i) (i + j) || . Как создать ArrayList froAnswer: murray?

E1 || эквивалентно || E1 = (T)((E1) op (E2)) || , где || T || является типом || E1 || , за исключением того, что || E1 || вычисляется только один раз. Ошибки при отливке могут привести к критическому отказу. Пример приведен из || § 15.26.2 || и приводит к тому, что x имеет значение 7, поскольку оно эквивалентно: . Другими словами, || i; || – это ярлык для || i =(тип i) (i + j) || . Как создать ArrayList из Java, список массивов может быть создан из массива с помощью кода, который выглядит примерно так: murray?

new ArrayList<>(Arrays.asList(array)); Also the Simplest way can be

E1 || эквивалентно || E1 = (T)((E1) op (E2)) || , где || T || является типом || E1 || , за исключением того, что || E1 || вычисляется только один раз. Ошибки при отливке могут привести к критическому отказу. Пример приведен из || § 15.26.2 || и приводит к тому, что x имеет значение 7, поскольку оно эквивалентно: . Другими словами, || i; || – это ярлык для || i =(тип i) (i + j) || . Как создать ArrayList из Java, список массивов может быть создан из массива с помощью codList.asList(array); e, который выглядит примерно так: murray?

E1 || эквивалентно || E1 = (T)((E1) op (E2)) || , где || T || является типом || E1 || , за исключением того, что || E1 || вычисляется только один раз. Ошибки при отливке могут привести к критическому отказу. Пример приведен из || § 15.26.2 || и приводит к тому, что x имеет значение 7, поскольку оно эквивалентно: . Другими словами, || i; || – это ярлык для || i =(тип i) (i + j) || . Как создать ArrayList из Java, список массивов можно создать из массива, используя альтернативный ответ codAlternative: List.asList(array); e, который выглядит примерно так: murray?

E1 || эквивалентно || E1 = (T)((E1) op (E2)) || , где || T || является типом || E1 || , за исключением того, что || E1 || вычисляется только один раз. Ошибки при отливке могут привести к критическому отказу. Пример приведен из || § 15.26.2 || и приводит к тому, что x имеет значение 7, поскольку оно эквивалентно: . Другими словами, || i; || – это ярлык для || i =(тип i) (i + j) || . Как создать ArrayList из Java, список массивов может быть создан из массива с помощью codGiven: Альтернативный ответ: List.asList(array); e, который выглядит примерно так: murray?

Element[] array = new Element[] { new Element(1), new Element(2), new Element(3) };

E1 || эквивалентно || E1 = (T)((E1) op (E2)) || , где || T || является типом || E1 || , за исключением того, что || E1 || вычисляется только один раз. Ошибки при отливке могут привести к критическому отказу. Пример приведен из || § 15.26.2 || и приводит к тому, что x имеет значение 7, поскольку оно эквивалентно: . Другими словами, || i; || – это ярлык для || i =(тип i) (i + j) || . Как создать ArrayList из Java, список массивов может быть создан из массива с помощью codeпростейший ответ заключается в том, чтобы сделать: Дано: Альтернативный ответ: List<Элемент>.asList(массив); e который выглядит примерно так Ответ: murray?

List list = Arrays.asList(array);

E1 || эквивалентно || E1 = (T)((E1) op (E2)) || , где || T || является типом || E1 || , за исключением того, что || E1 || вычисляется только один раз. Ошибки при отливке могут привести к критическому отказу. Пример приведен из || § 15.26.2 || и приводит к тому, что x имеет значение 7, поскольку оно эквивалентно: . Другими словами, || i; || – это ярлык для || i =(тип i) (i + j) || . Как создать ArrayList из Java, список массивов может быть создан из массива с помощью Codeпростейший ответ – сделать: Дано: Альтернативный ответ: Список<Это будет работать нормально. Элемент>.asList(массив); e, который чем-то похож на этот ответ: Мюррей? E1 || эквивалентно || E1 = (T)((E1) op (E2)) || , где || T || является типом || E1 || , за исключением того, что || E1 || вычисляется только один раз. Ошибки при отливке могут привести к критическому отказу. Пример приведен из || § 15.26.2 || и приводит к тому, что x имеет значение 7, поскольку оно эквивалентно: . Другими словами, || i; || – это ярлык для || i =(тип i) (i + j) || . Как создать ArrayList из Java, список массивов может быть создан из массива с помощью Codeпростейший ответ – сделать: Дано: Альтернативный ответ: Список <Но с некоторыми оговорками: Это будет работать нормально. Элемент>.asList(массив); e, который чем-то похож на этот ответ: Мюррей?

  • E1 эквивалентно E1 = (T)((E1) op (E2)) , где T является типом E1
  • , за исключением того, что E1 вычисляется только один раз. Ошибки при отливке могут привести к критическому отказу. Пример приведен из

8. E1 || эквивалентно || E1 = (T)((E1) op (E2)) || , где || T || является типом || E1 || , за исключением того, что || E1 || вычисляется только один раз. Ошибки при отливке могут привести к критическому отказу. Пример приведен из || § 15.26.2 || и приводит к тому, что x имеет значение 7, поскольку оно эквивалентно: . Другими словами, || i; || – это ярлык для || i =(тип i) (i + j) || . Как создать ArrayList из Java, список массивов может быть создан из массива с помощью Codeпростейший ответ заключается в следующем: Дано: Альтернативный ответ: Список<Список, возвращаемый из asList, имеет || фиксированный размер || . Но есть некоторые предостережения, поэтому, если вы хотите иметь возможность добавлять или удалять элементы из возвращаемого списка в своем коде, вам нужно будет обернуть его в новый || ARRAВ противном случае вы получите исключение || UnsupportedOperationException || Как генерировать случайные целые числа в определенном диапазоне в Java? Это может быть удивительно. Если вы измените исходный массив, список также будет изменен. Список, возвращаемый из || asList() |/, поддерживается исходным массивом. yList || .: Это будет работать нормально. Элемент>.asList(массив); e, который чем-то похож на этот ответ: murray?

E1 || эквивалентно || E1 = (T)((E1) op (E2)) || , где || T || является типом || E1 || , за исключением того, что || E1 || вычисляется только один раз. Ошибки при отливке могут привести к критическому отказу. Пример приведен из || § 15.26.2 || и приводит к тому, что x имеет значение 7, поскольку оно эквивалентно: . Другими словами, || i; || – это ярлык для || i =(тип i) (i + j) || . Как создать ArrayList из Java, список массивов может быть создан из массива с помощью Codeпростейший ответ заключается в следующем: Дано: Альтернативный ответ: Список<Список, возвращаемый из asList, имеет || фиксированный размер || . Но есть некоторые предостережения, поэтому, если вы хотите иметь возможность добавлять или удалять элементы из возвращаемого списка в своем коде, вам нужно будет обернуть его в новый || ARRAВ противном случае вы получите исключение || UnsupportedOperationException || Ответ: Как генерировать случайные целые числа в определенном диапазоне в Java? Это может быть удивительно. Если вы измените исходный массив, список также будет изменен. Список, возвращаемый из || asList() |/, поддерживается исходным массивом. yList || .: Это будет работать нормально. Элемент>.asList(массив); e, который чем-то похож на этот ответ: murray?

E1 эквивалентно E1 = (T)((E1) op (E2))

import java.util.concurrent.ThreadLocalRandom;

// nextInt is normally exclusive of the top value,
// so add 1 to make it inclusive
int randomNum = ThreadLocalRandom.current().nextInt(min, max + 1);

Смотрите соответствующий JavaDoc . Преимущество этого подхода заключается в том, что нет необходимости явно инициализировать файл java.util. Случайный экземпляр, который может стать источником путаницы и ошибок при неправильном использовании.

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

До Java 1.7 стандартный способ сделать это выглядел следующим образом:

import java.util.Random;

/**
 * Returns a pseudo-random number between min and max, inclusive.
 * The difference between min and max can be at most
 * Integer.MAX_VALUE - 1.
 *
 * @param min Minimum value
 * @param max Maximum value.  Must be greater than min.
 * @return Integer between min and max, inclusive.
 * @see java.util.Random#nextInt(int)
 */
public static int randInt(int min, int max) {

    // NOTE: This will (intentionally) not run as written so that folks
    // copy-pasting have to think about how to initialize their
    // Random instance.  Initialization of the Random instance is outside
    // the main scope of the question, but some decent options are to have
    // a field that is initialized once and then re-used as needed or to
    // use ThreadLocalRandom (if using at least Java 1.7).
    // 
    // In particular, do NOT do 'Random rand = new Random()' here or you
    // will get not very good / not very random results.
    Random rand;

    // nextInt is normally exclusive of the top value,
    // so add 1 to make it inclusive
    int randomNum = rand.nextInt((max - min) + 1) + min;

    return randomNum;
}

Смотрите соответствующий JavaDoc . На практике java.util. Случайный класс часто предпочтительнее, чем java.lang.Math.random() .

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

9. Почему char[] предпочтительнее, чем строка для паролей?

Ответ:

Строки являются неизменяемыми . Это означает, что после того, как вы создали String , если другой процесс может сбросить память, нет никакого способа (кроме отражения ) избавиться от данных до начинается сбор мусора .

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

Так что да, это проблема безопасности, но даже использование char [] только уменьшает окно возможностей для злоумышленника, и это только для этого конкретного типа атаки.

Также возможно, что массивы, перемещаемые сборщиком мусора, оставят случайные копии данных в памяти. Сборщик мусора может очистить всю память по ходу работы, чтобы избежать подобных вещей. Даже если это произойдет, все равно есть время, в течение которого char[] содержит фактические символы в качестве окна атаки.

10. Как эффективно перебирать каждую запись в Java Map?

Ответ:

Чтобы эффективно перебирать каждую запись в Java, используйте следующий код:

Map map = ...
for (Map.Entry entry : map.entrySet()) {
    System.out.println(entry.getKey() + "/" + entry.getValue());
}

Дополнительный Ответ:

Кроме того, это описание с примером может быть вам полезно

Например, если мы хотим найти сумму всех ключей и значений карты, мы можем написать:

  • Использование итератора и Карта. Вход
long i = 0;
    Iterator> it = map.entrySet().iterator();
    while (it.hasNext()) {
        Map.Entry pair = it.next();
        i += pair.getKey() + pair.getValue();
    }
  • Использование foreach и Карта. Вход
long i = 0;
    for (Map.Entry pair : map.entrySet()) {
        i += pair.getKey() + pair.getValue();
    }
  • Использование forEach из Java 8
final long[] i = {0};
    map.forEach((k, v) -> i[0] += k + v);
  • Использование набора ключей и для каждого
long i = 0;
    for (Integer key : map.keySet()) {
        i += key + map.get(key);
    }
  • Использование набора ключей и итератор
long i = 0;
    Iterator itr2 = map.keySet().iterator();
    while (itr2.hasNext()) {
        Integer key = itr2.next();
        i += key + map.get(key);
    }
  • Используя для и карты. Вход
long i = 0;
    for (Iterator> entries = map.entrySet().iterator(); entries.hasNext(); ) {
        Map.Entry entry = entries.next();
        i += entry.getKey() + entry.getValue();
    }
  • Использование Java 8 Stream API
final long[] i = {0};
    map.entrySet().stream().forEach(e -> i[0] += e.getKey() + e.getValue());
  • Параллельное использование Java 8 Stream API
final long[] i = {0};
    map.entrySet().stream().parallel().forEach(e -> i[0] += e.getKey() + e.getValue());
  • Использование Повторяющаяся карта из Коллекций Apache
long i = 0;
    MapIterator it = iterableMap.mapIterator();
    while (it.hasNext()) {
        i += it.next() + it.getValue();
    }
  • Использование Изменяемой карты коллекций Eclipse (CS)
final long[] i = {0};
    mutableMap.forEachKeyValue((key, value) -> {
        i[0] += key + value;
    });

в заключение

Это список из 10 наиболее часто задаваемых вопросов о Java. Если вы просмотрели полный список, пожалуйста, оставьте свой комментарий относительно списка.

Надеюсь, что эта статья помогла вам. Дайте нам знать, какое решение помогло вам в комментарии ниже. Кроме того, не забудьте поделиться этим постом, так как у других, подобных вам, также могут возникнуть аналогичные проблемы, связанные с Java.

Кроме того, пожалуйста, не стесняйтесь задавать любые вопросы, связанные с Java, мы будем рады вам помочь.

Исходный источник: Сообщение разработчика от True mark

Оригинал: “https://dev.to/truemark/10-most-asked-questions-about-java-5db3”