fixed some translation issues (#22351)

* fixed some translation issues

also added russian code comments

* ch
pull/34393/head
Zhannur Diyas 2018-11-19 21:51:00 +05:00 committed by Gregory Gubarev
parent 557e7bbb7b
commit da0d02d2bd
1 changed files with 37 additions and 33 deletions

View File

@ -1,10 +1,10 @@
---
title: Strings
localeTitle: Струны
localeTitle: Строки
---
# Струны
# Строки
Строки - это последовательности символов. В Java `String` является `Object` . Строки не следует путать с символом `char` как символы имеют буквально значение 1, а не последовательность символов. Вы все равно можете использовать 1 значение в пределах String, однако предпочтительно использовать `char` когда вы проверяете 1 символ.
Строки - это последовательности символов. В Java `String` наследует класс `Object` . Строки не следует путать с типом данных `char` так как `char` это лишь один символ, а не последовательность символов. Вы все равно можете использовать String для хранения одного символа, однако в таком случае предпочтительнее использовать `char`.
```java
String course = "FCC";
@ -18,32 +18,32 @@ true
Вы можете создать объект String следующими способами:
1. `String str = "I am a String"; //as a String literal`
2. `String str = "I am a " + "String"; //as a constant expression`
3. `String str = new String("I am a String"); //as a String Object using the constructor`
1. `String str = "Это строка"; //как значение строки`
2. `String str = "Это " + "строка"; //как выражение константа`
3. `String str = new String("Это строка"); //как объект класса String используя конструктор`
Возможно, вы думаете: в чем разница между тремя?
Возможно, вы думаете: в чем разница между этими тремя?
Ну, используя `new` ключевое слово гарантирует, что будет создан новый объект `String` , и новая ячейка памяти будет выделена в `Heap` памяти [(нажмите здесь, чтобы узнать больше)](https://docs.oracle.com/cd/E13150_01/jrockit_jvm/jrockit/geninfo/diagnos/garbage_collect.html) . строка литералы и постоянные выражения String кэшируются во время компиляции. Компилятор помещает их в пул строк String для предотвращения дублирования и улучшить потребление памяти. Распределение объектов дорогое, и этот трюк увеличивает производительность при создании строк. Если вы используете тот же самый буквальный, JVM использует тот же объект. Использование такого конструктора, как и выше, почти всегда является худшим выбором.
Используя ключевое слово `new` гарантирует, что будет создан новый объект `String`, и новая ячейка памяти будет выделена в `Heap` памяти [(нажмите здесь, чтобы узнать больше)](https://docs.oracle.com/cd/E13150_01/jrockit_jvm/jrockit/geninfo/diagnos/garbage_collect.html). Cтроковые литералы и постоянные выражения `String` кэшируются во время компиляции. Компилятор помещает их в пул строк `String` для предотвращения дублирования и улучшения потребления памяти. Распределение памяти для объектов дорогое, и этот прием увеличивает производительность при создании строк. Если вы используете те же самые значения строк, JVM использует тот же объект. Использование такого конструктора, как и выше, почти всегда является худшим выбором.
В этом фрагменте кода сколько объектов String создано?
```java
String str = "This is a string";
String str2 = "This is a string";
String str3 = new String("This is a string");
String str = "Это строка";
String str2 = "Это строка";
String str3 = new String("Это строка");
```
Ответ: 2 Создаются объекты String. `str` и `str2` оба относятся к одному и тому же объекту. `str3` имеет тот же контент, но с использованием `new` принудительных создание нового, отличного объекта.
Ответ: 2 Создаются объекты String. `str` и `str2` оба относятся к одному и тому же объекту. `str3` имеет то же самое значение, но с использованием ключевого слова`new` произойдет принудительное создание нового, отличного объекта.
Когда вы создаете строковый литерал, JVM внутренне проверяет, что называется `String pool` , чтобы увидеть, может ли он найти аналогичный (контентный) Строковый объект. Если он найдет его, он вернет ту же ссылку. В противном случае он просто продолжит работу и создаст новый объект String в пуле, чтобы такая же проверка может быть выполнена в будущем.
Когда вы создаете строковый литерал, JVM внутренне проверяет пул строк, так называемый `String pool` , чтобы увидеть, может ли он найти аналогичный (по значению) строковый объект. Если он найдет его, он вернет ту же ссылку. В противном случае он просто продолжит работу и создаст новый объект String в пуле, чтобы такая же проверка могла быть выполнена в будущем.
Вы можете проверить это, используя ласточку, быстрое сравнение объектов `==` и реализованное `equals()` .
Вы можете проверить это, используя быстрое сравнение объектов `==` и реализованное `equals()` .
```java
System.out.println(str == str2); // This prints 'true'
System.out.println(str == str3); // This prints 'false'
System.out.println(str.equals(str3)); // This prints 'true'
System.out.println(str == str2); // Выведет 'true'
System.out.println(str == str3); // Выведет 'false'
System.out.println(str.equals(str3)); // Выведет 'true'
```
Вот еще один пример того, как создать строку в Java с помощью разных методов:
@ -52,10 +52,10 @@ System.out.println(str == str2); // This prints 'true'
public class StringExample{
public static void main(String args[]) {
String s1 = "java"; // creating string by Java string literal
String s1 = "java"; // создание строки присвоением строкового значения
char ch[] = {'s','t','r','i','n','g','s'};
String s2 = new String(ch); // converting char array to string
String s3 = new String("example"); // creating Java string by new keyword
String s2 = new String(ch); // конвертация массива символов в строку
String s3 = new String("example"); // создание нового объекта строки используя слово new
System.out.println(s1);
System.out.println(s2);
System.out.println(s3);
@ -65,7 +65,7 @@ public class StringExample{
#### Сравнение строк
Если вы хотите сравнить значение двух переменных String, вы не можете использовать ==. Это связано с тем, что это будет сравнивать ссылки переменных а не значения, которые связаны с ними. Чтобы сравнить сохраненные значения строк, вы используете метод равно.
Если вы хотите сравнить значение двух переменных String, вы не можете использовать ==. Это связано с тем, что это будет сравнивать _ссылки_ переменных а не значения, которые связаны с ними. Чтобы сравнить значения строк, вы используете метод equals().
```java
boolean equals(Object obj)
@ -77,15 +77,15 @@ boolean equals(Object obj)
String str = "Hello world";
String str2 = "Hello world";
System.out.println(str == str2); // This prints false
System.out.println(str.equals(str2); // This prints true
System.out.println(str == str2); // Выведет false
System.out.println(str.equals(str2); // Выведет true
```
Первое сравнение ложно, потому что «==» рассматривает ссылки, и они не совпадают.
Второе сравнение верно, потому что переменные сохраняют одни и те же значения. В этом случае «Hello world».
Второе сравнение верно, потому что переменные хранят одни и те же значения. В этом случае «Hello world».
У нас есть несколько встроенных методов в String. Ниже приведен пример метода String Length ().
У нас есть несколько встроенных методов в String. Ниже приведен пример метода String.length(), который вычисляет длину строки в символах.
```java
public class StringDemo {
@ -100,13 +100,17 @@ public class StringDemo {
Это приведет к: - `String Length is : 17`
**Ответ: 2** Создаются объекты String. **Заметки**
**Ответ: 2**
Создаются объекты String.
**Заметки**
1. В методах String используются индексы с нулевым значением, за исключением второго аргумента `substring()` .
2. Класс String является окончательным - его методы нельзя переопределить.
3. Когда литерал String найден JVM, он добавляется в пул строковых литералов.
4. Класс String имеет имя метода `length()` , а массивы имеют длину имени атрибута.
5. В java строковые объекты неизменяемы. Неизменяемый просто означает неизменяемость или неизменяемость. После создания строкового объекта его данные или состояние не могут быть изменены, но создается новый строковый объект.
5. В java строковые объекты неизменяемы. Неизменяемый просто означает что созданную строку нельзя изменить. После создания строкового объекта его данные или состояние не могут быть изменены, но создается новый строковый объект.
Длина строки
@ -114,12 +118,12 @@ public class StringDemo {
```java
String a = "Hello";
int len = a.length(); // len is 5
int len = a.length(); // длина равна 5
```
#### Другие методы сравнения, которые также могут использоваться в String:
1. equalsIgnoreCase (): - сравнивает строку без учета чувствительности к регистру.
1. equalsIgnoreCase(): - сравнивает строку без учета чувствительности к регистру.
```java
String a = "HELLO";
@ -127,14 +131,14 @@ String a = "HELLO";
System.out.println(a.equalsIgnoreCase(b)); // It will print true
```
2. compareTo: - сравнивает значение лексикографически и возвращает целое число.
2. compareTo(): - сравнивает значение лексикографически и возвращает целое число.
```java
String a = "Sam";
String b = "Sam";
String c = "Ram";
System.out.println(a.compareTo(b)); // 0
System.out.prinltn(a.compareTo(c)); // 1 since (a>b)
System.out.println(c.compareTo(a)); // -1 since (c<a)
System.out.prinltn(a.compareTo(c)); // 1 потому что (a > b)
System.out.println(c.compareTo(a)); // -1 потому что (c < a)
```
```