Strings

Конвертировать с использованием StringBuffer или StringBuilder

StringBuilder и StringBuffer – это классы, используемые для объединения нескольких значений в одну строку. StringBuffer является потокобезопасным, но медленным, тогда как StringBuilder не является поточно-ориентированным, но работает быстрее.

Пример 1

class Method5
{
  public static void main(String args[]) 
  { 
    int number1 = -1234;
    StringBuilder sb = new StringBuilder(); 
    sb.append(number1); 
    String str1 = sb.toString(); 
    System.out.println("With StringBuilder method: string = " + str1); 
    StringBuffer SB = new StringBuffer(); 
    SB.append(number1); 
    String str2 = SB.toString(); 
    System.out.println("With StringBuffer method: string = " + str2); 
  } 
}

Вывод

With StringBuilder method: string = -1234
With StringBuffer method: string = -1234

Объект StringBuilder представляет объект String, который можно изменять и обрабатывать как массив с последовательностью символов. Чтобы добавить новый аргумент в конец строки, экземпляр StringBuilder реализует метод append().

Пример 2

class Method6
{
  public static void main(String args[]) 
  { 
	String str1 = new StringBuilder().append(1234).toString(); 
    System.out.println("With StringBuilder method: string = " + str1); 
    String str2 = new StringBuffer().append(1234).toString(); 
    System.out.println("With StringBuffer method: string = " + str2); 
  } 
}

Вывод

With StringBuilder method: string = -1234
With StringBuffer method: string = -1234

Наиболее важным является вызов метода toString(), чтобы получить строковое представление данных.

Поиск подстроки или символа в строке в Java

В класс включена поддержка поиска определенного символа или подстроки, для этого в нем имеются два метода — и .

— ищет первое вхождение символа или подстроки.

— ищет последнее вхождение символа или подстроки.

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

Чтобы найти первое или последнее вхождение символа, применяйте:  

Здесь символ, который нужно искать. Чтобы найти первое или последнее вхождение подстроки, применяйте:

Вы можете указать начальную позицию для поиска, воспользовавшись следующими формами:

Рассмотрим применение этих методов на следующем примере:

Java string методы — использование оператора ==

Оператор == проверяет ссылки, а не значения. Это означает, что он проверяет, являются ли сравниваемые элементы одним и тем же объектом. Если две переменные String указывают на один и тот же объект в памяти, сравнение возвращает true. В противном случае — false:

"Java" == "Java" //true

Здесь литералы интернируются компилятором и таким образом ссылаются на один и тот же объект:

new String("Java") == "Java" // false

Приведенные выше переменные String указывают на разные объекты:

new String("Java") == new String("Java") // false

Приведенные выше переменные String также указывают на разные объекты.

Оператор ‘==’ не сравнивает строки в java, а только ссылки, на которые они строки.

Пример

class TestClass{
  public static void main (String[] args){
    // ссылается на один и тот же объект, возвращает true
    if(  "Java" == "Java" ){
      System.out.println("Statement  is true");
    }else{
      System.out.println("Statement is false");
    }
    // указывает на другой объект, возвращает false
    if(new String("Java") == "Java"){
      System.out.println("Statement  is true");
    }else{
      System.out.println("Statement is false");
    }
    // указывает на другой объект, возвращает false
    if(new String("Java") == new String("Java") ){
      System.out.println("Statement  is true");
    }else{
      System.out.println("Statement is false");
    }
  }
}

Результат

Statement  is true
Statement is false
Statement is false

Методы класса String

У класса очень много методов: одних только конструкторов у него 18 штук! Поэтому ниже мы приведем только самые основные из них:

Методы Описание
Возвращает количество символов в строке
Проверяет, что строка == пустая строка
Проверяет, что в строке — только whitespace-символы: пробел, tab, enter и т.п.
Возвращает символ, который стоит на index-позиции в строке.
Возвращает массив символов (копию), из которых состоит строка
Преобразует строку в набор байт и возвращает массив байт.
Разделяет строку на несколько подстрок.
Склеивает вместе несколько подстрок
Помещает строку в пул .

Больше о конструкторах вы можете узнать из статьи Зачем нужен конструктор?

Давайте напишем программу, которая преобразовывает путь к файлу из Unix Style в Windows Style. Unix в качестве разделителя директорий использует символ , Windows — символ .

Решение 1 — использование массива char’ов

Код Примечания
Создание объекта Scanner
Чтение строки с консоли
Преобразование строки в массив символов
Цикл по символам
Если символ равен ,
заменить его на . Не забываем про экранирование.
Создаем новую строку на основе массива символов.
Выводим строку на экран.

Решение 2 — использование методов и :

Код Примечания
Создание объекта Scanner
Чтение строки с консоли
Преобразование строки в массив строк. В качестве разделителя используется символ (дополнительные два слеша – это следствие двойного экранирования).
Объединяем все строки из массива строк, в качестве разделителя используется символ (мы видим его экранированным).
Выводим строку на экран.

Решение 3 — использование метода :

Код Примечания
Создание объекта Scanner
Чтение строки с консоли
Просто заменяем один символ на второй
(второй — экранирован)
Выводим строку на экран.

String Pool

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

Во-первых, строки, заданные в коде, нужно все-таки где-то хранить. Код — это команды, а данные (тем более такие большие как строки) нужно хранить в памяти отдельно от кода. В коде фигурируют только ссылки на объекты-строки.

Во-вторых, все одинаковые литералы можно хранить в памяти только один раз. Так оно и работает. Когда код вашего класса загружается Java-машиной, все строковые литералы добавляются в , если их там еще нет. Если уже есть, просто используется ссылка на строку из .

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

Как это примерно работает:

Код Работа с StringPool

Именно поэтому переменные и будут хранить одинаковые ссылки.

Метод

Ну и самое интересное: вы можете программно добавить любую строку в . Для этого нужно просто вызвать метод у -переменной.

Метод добавит строку в , если ее еще там нет, и вернет ссылку на строку из .

Код Примечание

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

Сравнение строк: equals() или ==?

Хотя в двух переменных содержится одно и то же слово, мы имеем дело с двумя разными объектами и оператор == вернёт false.

Однажды, когда деревья были большими, мне понадобилось сравнить две строки из разных источников. Хотя строки выглядели совершенно одинаково, сравнение при помощи оператора == возвращало false и путало мне все карты. И только потом я узнал, что нужно использовать метод equals(). Строка в Java — это отдельный объект, который может не совпадать с другим объектом, хотя на экране результат выводимой строки может выглядеть одинаково. Просто Java в случае с логическим оператором == (а также !=) сравнивает ссылки на объекты (при работе с примитивами такой проблемы нет):

compareTo()

Метод compareTo() сравнивает строку с другой и возвращает int, сообщающий, меньше ли эта строка, равна или больше другой.

  • Если строка в порядке сортировки раньше, чем другая, возвращается отрицательное число.
  • совпадает с другой, возвращается 0.
  • Если находится после другой в порядке сортировки, выводит положительное число.

Вот пример:

String one   = "abc";
String two   = "def";
String three = "abd";

System.out.println( one.compareTo(two)   );
System.out.println( one.compareTo(three) );

В этом примере сравнивается одна строка с двумя другими. Вывод:

-3
-1

Числа отрицательны, потому что одна строка находится в порядке сортировки раньше, чем две другие.

Метод compareTo() фактически принадлежит интерфейсу Comparable.

Замена символов replace()

Класс Java String содержит метод replace(), который может заменять символы в строке. Он фактически не заменяет символы в существующей строке. Скорее, возвращает новый экземпляр String. Он равен экземпляру String, из которого он был создан, но с заменой указанных символов. Пример:

String source   = "123abc";
String replaced = source.replace('a', '@');

После выполнения этого кода замененная переменная будет указывать на строку с текстом:

123@bc

Метод replace() заменит все символы, соответствующие символу, переданному методу в качестве первого параметра, вторым символом, переданным в качестве параметра.

Получение символов и байтов

Можно получить символ по определенному индексу в строке, используя метод charAt():

String theString = "This is a good day to code";

System.out.println( theString.charAt(0) );
System.out.println( theString.charAt(3) );

Этот код распечатает:

T
s

Так как это символы, расположенные в индексах 0 и 3 в строке.

Вы также можете получить байтовое представление метода String, используя метод getBytes():

String theString = "This is a good day to code";

byte[] bytes1 = theString.getBytes();
byte[] bytes2 = theString.getBytes(Charset.forName("UTF-8");

Первый вызов getBytes() возвращает байтовое представление строки, используя кодировку набора символов по умолчанию на машине. Набор символов по умолчанию зависит от компьютера, на котором выполняется код. Поэтому обычно лучше явно указать набор символов, который будет использоваться для создания представления байтов (как в следующей строке).

Второй вызов getBytes() возвращает UTF-8-байтовое представление String.

Как изменить порядок вычисления

Порядок вычисления логических операторов меняют круглые скобки — так же, как в арифметике:

Добавив круглые скобки, мы поменяли приоритеты для вычисления. Теперь сперва будет определено выражение (true ^ true), которое вернёт false. А после — вычислится выражение false & false, которое тоже вернёт false.

То есть скобки повышают приоритет стоящего внутри выражения, а внутри самих скобок действуют прежние приоритеты.

Пример посложнее — выражение !(true && (false || true)) ^ !false.

Порядок вычисления:

  1. !(true && (false || true)) ^ !false
  2. !(true && true) ^ !false
  3. !true ^ !false
  4. false ^ !false
  5. false ^ true
  6. true

Объединение строк

Для соединения строк можно использовать
операцию сложения («+»):

String str1 = "Java";
String str2 = "Hello";
String str3 = str1 + " " + str2;
 
System.out.println(str3); // Hello Java

При этом если в операции сложения строк
используется не строковый объект, например, число, то этот объект преобразуется
к строке:

String str4 = "Год " + 2015;

Еще один метод объединения — метод join() позволяет
объединить строки с учетом разделителя. Например, две строки

String str1 = "Java";
String str2 = "Hello";

будут сливаться в одно слово «HelloJava», если их
объединить с помощью оператора +:

String str3 = str1 + str2;

но если мы хотим, чтобы две подстроки при
соединении были разделены пробелом, то можно воспользоваться методом join() следующим
образом:

String str3 = String.join(" ", str2, str1); // Hello Java

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

Обратите внимание, что каждый раз при
объединении строк мы получали новую строку как результат объединения

str length in Java – Using Standard Method

To find the length to string, we first taken in a string input in the code itself.

This string input is converted to a character array so as to traverse to the end of string individual character-wise to find the length.

To make this conversion, we can make use of a built in method for strings as below:

1 charlen=str.toCharArray();

In this character array, we traverse until the end of the array in a loop and keep incrementing the count which is to be stored in a separate integer variable (a).

The end value of this variable (a) is nothing but, the length of our input string.

Java string length code

Java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

importjava.util.Scanner;

classStringLength

{

publicstaticvoidmain(Stringx)

{

Scanner sc=newScanner(System.in);

Stringstr=»Hello World»;

charlen=str.toCharArray();

inta=;

for(charchlen)

{

a++;

}

System.out.println(«Length of a string is :»+a);

}

}

Output:

output

Java

1 Length ofastringis11

 Java String Length – Predefined Method

In the above example, we had given inputs manually and predetermined in the code itself and if any changes in value were to be made, the user has to go to the code and make changes.

To avoid this, Scanner class in Java can be made use of.

With the help of Scanner class any primitive type inputs can be read at runtime.

So, for our problem, we will read a string input. String in Java has many predefined methods in it. T

By making use of this predefined method and giving our input string as the String whose length is to be found, we can directly display the length in our output screen.

str length java using method

Java

1
2
3
4
5
6
7
8
9
10
11
12
13
14

importjava.util.Scanner;

classStringLength

{

publicstaticvoidmain(Stringx)

{

Scanner sc=newScanner(System.in);

System.out.println(«Enter a string :»);

Stringstr=sc.nextLine();

intlen=str.length();

System.out.println(«string contains «+len+»characters);

}

 
}

Output:

output

Java

1
2
3

Enterastring

very good morning

stringcontains17characters

Using Scanner Class

In here, just like the explanation given above to make use of scanner class to read inputs at runtime, the same method can be used to read our input.

After getting the input, instead of using a predefined method, we can make use of the logic discussed in the beginning by converting the string to a character array.

str scanner class

Java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

importjava.util.Scanner;

classStringLength

{

publicstaticvoidmain(Stringx)

{

intc=;

Scanner sc=newScanner(System.in);

System.out.println(«Enter a string :»);

Stringstr=sc.nextLine();

chara=str.toCharArray();

for(charcha)

{

c++;

}

System.out.println(«string contains «+c+» characters»);

}

 
}

Output:

output

Java

1
2
3

Enterastring

hi how are you

stringcontains14characters

Using Static Method

This technique is made use of for better readability. We have split up the code into two methods in the same class.

The main method is responsible for all the input and output operations. Input is taken in with the help of Scanner class.

After taking input, a separate static method (length) consisting of the set of statements for calculation of length of string is called.

This method (length) converts individual alphabet to character and increments the count to finally find the total length of the string.

After executing all the statements in it, returns the length of the string. The main logic is enclosed in a try block so that we can catch if any exception occurs like a null pointer, out of bound, etc.

java program to calculate length of string

Java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

importjava.util.Scanner;

classStringLength

{

publicstaticvoidmain(Stringarg)

{

Scanner sc=newScanner(System.in);

System.out.println(«Enter a string :»);

Stringstr=sc.nextLine();

intres=length(str);

System.out.println(«string contains «+res+» characters»);

}

staticintlength(Strings)

{

intj=;

try

{

for(j=;;j++)

s.charAt(j);

}

catch(Exceptione)

{

}

returnj;

}

 
}

Output:

output

Java

1
2
3

Enterastring

welcome tojava world

stringcontains21characters

  • Java Program To Calculate Median Array | 4 Methods
  • Implement Simple Calculator Using JFrame/Swing In Java | Programs

Как логические операторы работают с целыми числами

Мы уже знаем, что логические операции применимы к логическим аргументам (операндам). Каждый логический операнд — это выражение, которое является истинным (true) или ложным (false) — то есть возвращает булево значение. Иными словами, логический операнд — это выражение типа boolean.

Выходит, применять логические операторы к целочисленным аргументам нельзя?

Можно. Внутри Java все целочисленные типы представлены двоичными числами разной длины. И к ним уже применимы бинарные логические операторы ^, | и &.

Только в этом случае они работают с двоичным представлением операндов — выполняют операции над их битами попарно (рассматривая их как логические единицы и нули). Поэтому и сами операторы ^, | и & зовутся побитовыми.

Как ^, | и & работают с целочисленными операндами

Рассмотрим пример:

Чтобы повторить вычисления Java, нужно:

  1. Перевести значения обоих операндов в двоичную систему счисления.
  2. Расположить результаты перевода друг под другом.
  3. Сравнять в них число разрядов (дополнить лидирующими нулями).
  4. Применить к битам из каждого столбца оператор (&, | или ^).
  5. Записать результат каждой операции ниже в том же столбце.
  6. Перевести итог в десятичную форму.

Потренируемся: вычислим сами 3 & 5

Число 3 в двоичной системе счисления имеет вид 11, а число 5 — 101.

Так как у числа 5 три разряда в двоичной системе, а у числа 3 — всего два, добавим лидирующий ноль к числу 3 в двоичной системе и получим 011.

Берём цифры из обоих чисел и применяем к ним попарно оператор & (AND):

3(10) = 011(2) 1 1
& & &
5(10) = 101(2) 1 1
= = =
001(2) = 1(10) 1

Устройство класса String

Сегодня мы поговорим о классе . Класс String — самый популярный класс в Java после типа int. Он используется абсолютно везде. У него есть куча полезных методов, которые лучше знать, чем не знать.

Класс — единственный класс, кроме примитивных типов, литералы которого можно использовать в ; компилятор по-особому обрабатывает сложение строк и объектов; объекты по-особому хранятся в памяти. В общем, класс — это очень специфический класс.

Также у класса есть куча классов-сателлитов, цель которых — еще больше упростить работу со строками в Java. Когда вы изучите все это, вам действительно станет значительно проще делать многие вещи. Ну а начнем мы с самого сердца этой экосистемы — с устройства класса .

Массив символов

А устроен класс на самом деле очень просто: внутри него находится массив символов (char), который хранит все символы строки. Вот так, например, хранится слово «Привет»:

Важно!

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

Java Strings are Immutable

In Java, strings are immutable. This means, once we create a string, we cannot change that string.

To understand it more deeply, consider an example:

Here, we have created a string variable named example. The variable holds the string «Hello! «.

Now suppose we want to change the string.

Here, we are using the method to add another string World to the previous string.

It looks like we are able to change the value of the previous string. However, this is not .

Let’s see what has happened here,

  1. JVM takes the first string «Hello! «
  2. creates a new string by adding «World» to the first string
  3. assign the new string «Hello! World» to the example variable
  4. the first string «Hello! « remains unchanged

Диапазоны значений и знак целочисленных типов данных

Как вы уже знаете из предыдущего урока, переменная с n-ным количеством бит может хранить 2n возможных значений. Но что это за значения? Это значения, которые находятся в диапазоне. Диапазон — это значения от и до, которые может хранить определенный тип данных. Диапазон целочисленной переменной определяется двумя факторами: её размером (измеряется в битах) и её знаком (который может быть signed или unsigned).

Целочисленный тип signed (со знаком) означает, что переменная может содержать как положительные, так и отрицательные числа. Чтобы объявить переменную как signed, используйте ключевое слово :

signed char c;
signed short s;
signed int i;
signed long l;
signed long long ll;

1
2
3
4
5

signedcharc;

signedshorts;

signedinti;

signedlongl;

signedlonglongll;

По умолчанию, ключевое слово пишется перед типом данных.

1-байтовая целочисленная переменная со знаком (signed) имеет диапазон значений от -128 до 127, т.е. любое значение от -128 до 127 (включительно) может храниться в ней безопасно.

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

Целочисленный тип unsigned (без знака) может содержать только положительные числа. Чтобы объявить переменную как unsigned, используйте ключевое слово :

unsigned char c;
unsigned short s;
unsigned int i;
unsigned long l;
unsigned long long ll;

1
2
3
4
5

unsignedcharc;

unsignedshorts;

unsignedinti;

unsignedlongl;

unsignedlonglongll;

1-байтовая целочисленная переменная без знака (unsigned) имеет диапазон значений от 0 до 255.

Обратите внимание, объявление переменной как unsigned означает, что она не сможет содержать отрицательные числа (только положительные). Теперь, когда вы поняли разницу между signed и unsigned, давайте рассмотрим диапазоны значений разных типов данных:

Теперь, когда вы поняли разницу между signed и unsigned, давайте рассмотрим диапазоны значений разных типов данных:

Размер/Тип Диапазон значений
1 байт signed от -128 до 127
1 байт unsigned от 0 до 255
2 байта signed от -32 768 до 32 767
2 байта unsigned от 0 до 65 535
4 байта signed от -2 147 483 648 до 2 147 483 647
4 байта unsigned от 0 до 4 294 967 295
8 байтов signed от -9 223 372 036 854 775 808 до 9 223 372 036 854 775 807
8 байтов unsigned от 0 до 18 446 744 073 709 551 615

Для математиков: Переменная signed с n-ным количеством бит имеет диапазон от -(2n-1) до 2n-1-1. Переменная unsigned с n-ным количеством бит имеет диапазон от 0 до (2n)-1.

Для нематематиков: Используем таблицу

Начинающие программисты иногда путаются между signed и unsigned переменными. Но есть простой способ запомнить их различия. Чем отличается отрицательное число от положительного? Правильно! Минусом спереди. Если минуса нет, значит число — положительное. Следовательно, целочисленный тип со знаком (signed) означает, что минус может присутствовать, т.е. числа могут быть как положительными, так и отрицательными. Целочисленный тип без знака (unsigned) означает, что минус спереди отсутствует, т.е. числа могут быть только положительными.

Creating Format Strings

You have printf() and format() methods to print output with formatted numbers. The String class has an equivalent class method, format(), that returns a String object rather than a PrintStream object.

Using String’s static format() method allows you to create a formatted string that you can reuse, as opposed to a one-time print statement. For example, instead of −

Example

System.out.printf("The value of the float variable is " +
                  "%f, while the value of the integer " +
                  "variable is %d, and the string " +
                  "is %s", floatVar, intVar, stringVar);

You can write −

String fs;
fs = String.format("The value of the float variable is " +
                   "%f, while the value of the integer " +
                   "variable is %d, and the string " +
                   "is %s", floatVar, intVar, stringVar);
System.out.println(fs);

Метод String equals()

В Java сравнение строк equals проверяет исходное содержимое строки. Он возвращает true, если параметр — это объект String, который представляет собой ту же строку символов, что и объект:

Objects.equals("Java", new String("Java")) //true

Если нужно проверить, имеют ли две строки одинаковое значение, можно использовать Objects.equals().

Пример

class TestClass{
  public static void main (String[] args)	{
    String str1 = "Java";
    String str2 = "Java";
    String str3 = "ASP";
    String str4 = "JAVA";
    String str5 = new String("Java");
    // оба равны, возвращают true
    if(str1.equals(str2)){
      System.out.println("Statement  is true");
    }else{
      System.out.println("Statement is false");
    }
    // оба не равны, возвращают false
    if(str1.equals(str3)){
      System.out.println("Statement  is true");
    }else{
      System.out.println("Statement is false");
    }
    // оба не равны, возвращают false
    if(str1.equals(str4)){
      System.out.println("Statement  is true");
    }else{
      System.out.println("Statement is false");
    }
    // оба равны, возвращают true
    if(str1.equals(str5)){
      System.out.println("Statement  is true");
    }else{
      System.out.println("Statement is false");
    }
  }
}

Результат

Statement  is true
Statement is false
Statement is false
Statement  is true

Добавление текста в конец

  • Метод читает символы текста сопоставителя и присоединяет их в конец объекта , на который ссылается аргумент . Этот метод прекращает чтение на последнем символе, предшествующем предыдущему соответствию шаблону. Далее, метод добавляет символы из объекта типа , на который ссылается аргумент , в конец объекта (строка может содержать ссылки на текстовые последовательности, захваченные во время предыдущего поиска; они указываются при помощи символов и номеров захватываемых групп). Наконец, метод устанавливает значение позиции сопоставителя для добавления в конец равным позиции последнего совпавшего символа плюс единица, после чего возвращает ссылку на текущий сопоставитель.

Метод генерирует исключение , если сопоставитель еще не находил соответствия или предыдущая попытка поиска завершилась неудачно. Он генерирует исключение , если строка задает отсутствующую в шаблоне захватываемую группу).

Метод добавляет весь текст в объект и возвращает ссылку на этот объект. После последнего вызова метода , вызовите метод , чтобы скопировать оставшийся текст в объект .

Захватываемые группы
Как вы помните из части 1, захватываемая группа — это последовательность символов, заключенная в метасимволы круглых скобок (). Цель этой конструкции состоит в сохранении найденных символов для дальнейшего повторного использования во время поиска по шаблону. Все символы из захватываемой группы рассматриваются во время поиска по шаблону как единое целое.

Преобразование к строковому типу

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

Более того, это автоматически происходит, когда мы складываем тип с каким-нибудь другим типом. Примеры:

Команда Примечание
содержит строку
содержит строку
содержит строку

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

Арифметические операции с типом проводить нельзя. Даже если строка целиком состоит из цифр.

Примеры:

Команда Примечание
содержит строку
содержит строку
содержит строку

Операция сложения выполняется слева направо, так что результат может быть несколько неожиданным. Пример:

Команда Примечание
содержит строку

Порядок выполнения:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector