Java tostring() method

Через DecimalFormat

DecimalFormat – это конкретный подкласс класса NumberFormat, который форматирует десятичные числа. Он имеет множество функций, предназначенных для анализа и форматирования чисел. Вы можете использовать его для форматирования числа в строковое представление по определенному шаблону.


Пример

import java.text.DecimalFormat;
public class Method4
{
	 public static void main(String[] args) 
	 {
	      int number = 12345;
	      DecimalFormat numberFormat = new DecimalFormat("##,###");
	      String str = numberFormat.format(12345);	      
          System.out.println("The number to be converted is: " + number);
	      System.out.println("The string version of 12345 is: " + str);
	 }
	 
}

Вывод

The number to be converted is: 12345
The string version of 12345 is: 12,345

Если вы знаете, как использовать метод DecimalFormat, это лучший вариант для преобразования Integer в String из-за уровня контроля, который можете иметь при форматировании. Можете указать количество знаков после запятой и разделитель запятых для лучшей читаемости, как показано в примере выше.

When to use toString() method

In Java, toString method guarantees that an object can be represented textually.This is especially useful for logging, debugging, or any other circumstance where you need to be able to render any and every object you encounter as a string.

If you print any object, java compiler internally invokes the toString() method on the object. So overriding the toString() method, returns the desired output, it can be the state of an object etc. depends on your implementation.

Objects often implement custom toString behavior so that the method actually tells you something about the object instance. For example, a Person class might override it to return «Last name, First name» while a Date class will show the date formatted according to some default setting

You use toString() when you want to concat Strings and not think about a special attribute, just provide a default one to the programmer. Like

One of the most common situations where we use toString is when using StringBuilder to construct a String.

Many programmers use logging API like Log4J or java.util.Logger to print logs and often pass Object there: and if programmer doesn’t override toString and print meaningful information like car manufacturer name, gears etc than it would be difficult to diagnose the problem.

7 ответов

84 Лучший ответ

Предполагается, что возвращает .

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

Например, Eclipse может сделать это, если вы просто щелкните правой кнопкой мыши исходный код и выберите

24 май 2012, в 10:38 Поделиться 5

Метод Java toString()

Если вы хотите представить любой объект в виде строки, то появляется метод toString().

Метод toString() возвращает строковое представление объекта.

Если вы печатаете любой объект, java-компилятор внутренне вызывает метод toString() объекта. Таким образом, переопределение метода toString() возвращает желаемый результат, это может быть состояние объекта и т.д. Зависит от вашей реализации.

Преимущество метода Java toString()

Переопределяя метод toString() класса Object, мы можем вернуть значения объекта, поэтому нам не нужно писать много кода.

Выход без метода toString()

Вы можете видеть в примере выше # 1. печать s1 и s2 печатает значения Hashcode для объектов, но я хочу напечатать значения этих объектов. Поскольку java-компилятор внутренне вызывает метод toString(), переопределение этого метода возвращает указанные значения. Позвольте понять это с приведенным ниже примером:

Обратите внимание, что toString() в основном связано с концепцией полиморфизма в Java. В Eclipse попробуйте щелкнуть по кнопке toString() и щелкнуть правой кнопкой мыши по нему. Затем нажмите «Открыть декларацию» и посмотрите, откуда появился Superclass toString()

02 июль 2015, в 03:20 Поделиться 4

Вы можете создать новый объект в toString(). использовать

вместо

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

24 май 2012, в 09:32 Поделиться 3

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

Но создание нового объекта из вашего метода toString() — это не то, что вы хотите делать.

24 май 2012, в 09:19 Поделиться 1

мы можем даже писать так, создавая новый объект String в классе и присваивая ему то, что когда-либо хотим в конструкторе, и возвращаем его в метод toString, который переопределяется

20 дек. 2016, в 16:03 Поделиться 1

Ну, на самом деле вам нужно будет вернуть что-то вроде этого, потому что toString должно возвращать строку

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

Что вы должны делать

Надеюсь, это поможет спасибо

02 июль 2015, в 04:22 Поделиться 1

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

09 сен. 2014, в 15:15 Поделиться

Ещё вопросы

  • 452У кого-нибудь есть тесты (код и результаты), сравнивающие производительность приложений Android, написанных на Xamarin C # и Java?
  • 36Где скачать sqlitejdbc?
  • 2722В чем разница между общедоступным, защищенным, частным и частным в Java?
  • 1753Как вы утверждаете, что в тестах JUnit 4 выдается определенное исключение?
  • 1387Зачем использовать геттеры и сеттеры / средства доступа?
  • 1099Что означает «Не удалось найти или загрузить основной класс»?
  • 907Как я могу дополнить целое число нулями слева?
  • 820Список Java 8 <V> на карту <K, V>
  • 727Как мне преобразовать строку в InputStream в Java?
  • 666Дополнительные параметры Java

7.1 Изменения строк

Строки в Java — это неизменяемые объекты (immutable). Так было сделано для того, чтобы класс-строку можно было сильно оптимизировать и использовать повсеместно. Например, в качестве ключей у коллекции HashMap рекомендуется использовать только immutable-типы.

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

Например, у нас есть очень большая строка и мы часто дописываем что-то в ее конец. В этом случае даже коллекция символов () может быть эффективнее, чем постоянное пересоздание строк и конкатенации объектов типа String.

Именно поэтому в язык Java все же добавили тип String, который можно менять. Называется он .


Создание объекта

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

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

Список методов

Класс имеет два десятка полезных методов, вот самые важные из них:

Метод Описание
Преобразовывает переданный объект в строку и добавляет к текущей строке
Преобразовывает переданный объект в строку и вставляет в середину текущей строки
Заменяет часть строки, заданную интервалом start..end на переданную строку
Удаляет из строки символ под номером index
Удаляет из строки символы, заданные интервалом
Ищет подстроку в текущей строке
Ищет подстроку в текущей строке с конца
Возвращает символ строки по его индексу
Возвращает подстроку, заданную интервалом
Разворачивает строку задом наперед.
Изменяет символ строки, заданный индексом на переданный
Возвращает длину строки в символах

Вот краткое описание каждого метода

Преобразование с использованием Integer.toString(int)

Класс Integer имеет статический метод, который возвращает объект String, представляющий параметр int, указанный в функции Integer.toString(int). Этот подход, в отличие от других, может возвращать исключение NullPointerException.

Синтаксис

Есть два разных выражения для метода Integer.toString():

public static String toString(int i)

public static String toString(int i, int radix)

Параметры

Параметры этого метода:

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

Возвращаемое значение

Возвращаемое значение для обоих выражений – строка Java, представляющая целочисленный аргумент «i». Если используется параметр radix, возвращаемая строка определяется соответствующим основанием.

Пример

package MyPackage;
public class Method1 
{
	public static void main(String args[]) 
	{
		  int n = Integer.MAX_VALUE;
		  String str1 = Integer.toString(n);
		  System.out.println("The output string is: " + str1);
		  int m = Integer.MIN_VALUE;
		  String str2 = Integer.toString(m);
		  System.out.println("The output string is: " + str2);
	}
	 
}

Special Characters

Because strings must be written within quotes, Java will misunderstand this string, and generate an error:

The solution to avoid this problem, is to use the backslash escape character.

The backslash () escape character turns special characters into string characters:

Escape character Result Description
\’ Single quote
« Double quote
\\ \ Backslash

The sequence   inserts a double quote in a string:

Example

The sequence   inserts a single quote in a string:

Example

The sequence   inserts a single backslash in a string:

Example

Six other escape sequences are valid in Java:

Code Result Try it
\n New Line Try it »
\r Carriage Return Try it »
\t Tab Try it »
\b Backspace Try it »
\f Form Feed

Другие математические функции

Math.random() возвращает псевдослучайное число в диапазоне (0; 1], например:

for(let i = ;i < 10;++i)
   console.log( Math.random() );

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

Math.max(a, b, c…) / Math.min(a, b, c…) возвращают наибольшее/наименьшее число из переданных аргументов:

let max = Math.max(1, 2, , -10, 5, 7);
let min = Math.min(1, 2, -10, 5);
console.log( max );        // 7
console.log( min );        // -10

Число аргументов может быть любым.

Math.pow(n, power) возвращает число n, возведённое в степень power:

console.log( Math.pow(2, 10) ); // 2 в степени 10 = 1024

Объект Math содержит множество других функций (cos, sin) и констант, например, PI, которыми удобно оперировать в JavaScript.

Видео по теме

JavaScipt #1: что это такое, с чего начать, как внедрять и запускать

JavaScipt #2: способы объявления переменных и констант в стандарте ES6+

JavaScript #3: примитивные типы number, string, Infinity, NaN, boolean, null, undefined, Symbol

JavaScript #4: приведение типов, оператор присваивания, функции alert, prompt, confirm

JavaScript #5: арифметические операции: +, -, *, /, **, %, ++, —

JavaScript #6: условные операторы if и switch, сравнение строк, строгое сравнение

JavaScript #7: операторы циклов for, while, do while, операторы break и continue

JavaScript #8: объявление функций по Function Declaration, аргументы по умолчанию

JavaScript #9: функции по Function Expression, анонимные функции, callback-функции

JavaScript #10: анонимные и стрелочные функции, функциональное выражение

JavaScript #11: объекты, цикл for in

JavaScript #12: методы объектов, ключевое слово this

JavaScript #13: клонирование объектов, функции конструкторы

JavaScript #14: массивы (array), методы push, pop, shift, unshift, многомерные массивы

JavaScript #15: методы массивов: splice, slice, indexOf, find, filter, forEach, sort, split, join

JavaScript #16: числовые методы toString, floor, ceil, round, random, parseInt и другие

JavaScript #17: методы строк — length, toLowerCase, indexOf, includes, startsWith, slice, substring

JavaScript #18: коллекции Map и Set

JavaScript #19: деструктурирующее присваивание

JavaScript #20: рекурсивные функции, остаточные аргументы, оператор расширения


JavaScript #21: замыкания, лексическое окружение, вложенные функции

JavaScript #22: свойства name, length и методы call, apply, bind функций

JavaScript #23: создание функций (new Function), функции setTimeout, setInterval и clearInterval

Benefits of overriding toString method

I think most Java developers acknowledge the value of good toString() implementations. Although a toString() method won’t impact logic like an equals(Object) or hashCode() method can, it can improve debugging and diagnostic efficiency. Less time spent figuring out what the object’s state is means more time fixing the problem, moving onto more interesting challenges, and satisfying more client needs.

As discussed, overridden toString helps in debugging by printing meaningful information.

If you are debugging Java program in Eclipse then using watch or inspect feature to look object, toString will definitely help you.

While it isn’t as important as obeying the equals and hashCode contracts, providing a good toString implementation makes your class much more pleasant to use. The toString method is automatically invoked when an object is passed to println, printf, the string concatenation operator, or assert, or printed by a debugger. Now if you’ve provided a good toString method for PhoneNumber, generating a useful diagnostic message is as easy as this:

Ответы на вопрос(7)

26 июл. 2012 г., 00:29

вы не должны использовать toString () для чего-то, от чего зависит ваш код. Теперь, что вы пытаетесь достичь? Можете ли вы дать какой-либо код из этих классов? Я думаю, ваш метод engineMove должен принимать объект Move, а не String. Если вы можете дать более подробную информацию, мы сможем направить вас в лучшем направлении.

Также будьте осторожны с тем кодом, который у вас есть. Зачем вам нужно создавать новый объект Move, который занимает время и ресурсы внутри toString ()? toString () должен работать с экземпляром класса, так что вам не нужно создавать новый, но тем более, используя     S + = & Quot; & Quot; + двигаться; будет неявно вызывать toString () для нового объекта Move, который будет вызывать его снова для нового объекта Move …

Комментировать

26 июл. 2012 г., 00:25

ement a custom textual representation of an object. You will find this procedure throughout li,terature and documentation.

In Java (like it is the case in other languages like C#) the method is defined in the object type which means that every object in Java has this method. If your custom object (which inherits from class ) overwrites the method then your base class provides a new implementation of this method which hides/omits the method from the super class.

Это означает, что когда вы определяете метод в вашем пользовательском классе A вызов экземпляра этого типа (скажем, это a) приведет к вызову вашей реализации.

Комментировать

26 июл. 2012 г., 00:27

at you are simply repeating the logic that is in the Move class. In order to add any other details, I have one question: to what class are you adding this toString() method?

You call this method just like any other method. First you need an instance of an object to call it with:

someObj.toString();

Чтобы дать более подробную информацию, мне нужен ответ на предыдущий вопрос.

Комментировать

Решение Вопроса

26 июл. 2012 г., 00:51

 это хороший подход.

HoweverВаша текущая реализация делает большую ошибку, создавая новую объект (см. ниже).

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

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

IMPORTANT NOTE:

Выshould not создавать новый объект внутри его метод.

Это очень плохая идея (как уже упоминалось другими).

Ваш Метод должен просто построить строку и вернуть ее.

Свернуть комментарии

26 июл. 2012 г., 00:29

 реализовано в учебный класс? если да, то я вижу бесконечный цикл. И … Я действительно не понимаю, почему вы создаете новый экземпляр учебный класс.

Во всяком случае, для генерации строкового представления в класс попробуйте что-то вроде этого:

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

Свернуть комментарии

26 июл. 2012 г., 00:18

 должно быть ограничено отладкой.

Свернуть комментарии

isFinite и isNaN

Если по каким-то причинам результатом вычислений становятся значения Infinite или NaN, то было бы полезно иметь функции, которые бы умели «узнавать» такие выражения. Этими функциями как раз и являются isFinite и isNaN. Например:

console.log( isNaN(NaN) );       // true
console.log( isNaN("1") );        // false
console.log( isNaN(2) );          // false
console.log( isNaN("abc") );    // true

По аналогии работает и вторая функция isFinit:

console.log( isFinite("15") ); // true
console.log( isFinite("str") ); // false, потому что специальное значение: NaN
console.log( isFinite(Infinity) ); // false

Как видим, она возвращает true, если это число и оно ограничено (не бесконечно) и false в других случаях.

Кстати, иногда isFinite используется для проверки: содержится ли в строке число:

let num = prompt("Enter a number", '');
if( isFinite(num) ) console.log("это число");
else console.log("это не число");

Правда, если num будет пустой строкой, то эта функция решит, что это число 0 (так как пустая строка приводится к числу 0). Поэтому, более точная проверка будет такой:

if( num.length >  && isFinite(num) ) console.log("это число");
else console.log("это не число");

Особенности числовой арифметики

В JavaScript число представлено в виде 64-битного формата IEEE-754. Для хранения числа используется 64 бита: 52 из них используется для хранения цифр, 11 из них для хранения положения десятичной точки (если число целое, то хранится 0), и один бит отведён на хранение знака. Если число слишком большое, оно переполнит 64-битное хранилище, JavaScript вернёт бесконечность:

console.log( 1e500 ); // Infinity

Наиболее часто встречающаяся ошибка при работе с числами в JavaScript – это потеря точности. Например, сумма двух таких вещественных чисел:

let res = 0.1+0.2;
console.log( res );

не дает точное значение 0,3. Потому, например, при таком сравнении:

if(res == 0.3) console.log( true );

мы получим значение false и оператор после if выполнен не будет. Почему так происходит? Не вдаваясь в подробности, можно сказать так: вещественные числа 0.1 и 0.3 в двоичной системе счисления (именно так они представляются в памяти ЭВМ) являются бесконечной дробью. Отсюда и потеря точности.

Overloads

Преобразует значение данного экземпляра в String.Converts the value of this instance to a String.


Преобразует значение подстроки этого экземпляра в String.Converts the value of a substring of this instance to a String.

ToString()

Преобразует значение данного экземпляра в String.Converts the value of this instance to a String.

Returns

String

Строка, чье значение совпадает с данным экземпляром.A string whose value is the same as this instance.

Examples

В следующем примере демонстрируется вызов метода ToString.The following example demonstrates calling the ToString method. Этот пример является частью большого примера, приведенного для класса StringBuilder.This example is part of a larger example provided for the StringBuilder class.

Необходимо вызвать метод ToString для преобразования объекта StringBuilder в String объект, прежде чем передавать строку, представленную объектом StringBuilder, в метод, имеющий параметр String или отображаемый в пользовательском интерфейсе.You must call the ToString method to convert the StringBuilder object to a String object before you can pass the string represented by the StringBuilder object to a method that has a String parameter or display it in the user interface.

ToString(Int32, Int32)

Преобразует значение подстроки этого экземпляра в String.Converts the value of a substring of this instance to a String.

Parameters

startIndex
Int32

Начальная позиция подстроки в данном экземпляре.The starting position of the substring in this instance.

length
Int32

Длина подстроки.The length of the substring.

Returns

String

Строка, чье значение совпадает с указанной подстрокой данного экземпляра.A string whose value is the same as the specified substring of this instance.

Exceptions

ArgumentOutOfRangeException

Значение параметра или меньше нуля. or is less than zero.

-или—or-

Сума значений и превышает длину текущего экземпляра.The sum of and is greater than the length of the current instance.

Необходимо вызвать метод ToString для преобразования объекта StringBuilder в String объект, прежде чем передавать строку, представленную объектом StringBuilder, в метод, имеющий параметр String или отображаемый в пользовательском интерфейсе.You must call the ToString method to convert the StringBuilder object to a String object before you can pass the string represented by the StringBuilder object to a method that has a String parameter or display it in the user interface.

Difference Between Convert.ToString and ToString Method in c#

In this article, I am going to discuss the Difference Between Convert.ToString and ToString Method in C# with an example. Please read our previous article before proceeding to this article where we discussed why and how to override the Equals method in C# with some examples. 

Convert.ToString and ToString Method in C#

Both these methods are used to convert a value to string. The difference is Convert.ToString() method handles null whereas the ToString() doesn’t handle null in C#.

In C# if you declare a string variable and if you don’t assign any value to that variable, then by default that variable takes a null value. In such a case, if you use the ToString() method then your program will throw the null reference exception. On the other hand, if you use the Convert.ToString() method then your program will not throw an exception.

Let us understand the Difference Between these two methods with an example.
namespace UnderstandingToStringMethod
{
    public class Program
    {
        public static void Main()
        {
            Customer C1 = null;
            C1.ToString();
            Console.ReadLine();
        }
    }
    public class Customer
    {
        public string FirstName { get; set; }
        public string LastName { get; set; }
    }
}

When you run the application, it will give you the following error

This is because of the ToString() method in C# expect the object to be not NULL on which it is invoking. In our example the object C1 is Null and we are invoking the ToString() on the NULL object, so it gives NULL Reference exception.

Let see another example.
namespace UnderstandingToStringMethod
{
    public class Program
    {
        public static void Main()
        {
            String Name = null;
            Name.ToString();
            Console.ReadLine();
        }
    }
}

When we execute the above program, it also gives us the same NULL Reference exception as shown below.

This is because the Name variable is Null and we are invoking the ToString() method. Let see what happens when we use the Convert.Tostring() method with the above two examples.

namespace UnderstandingObjectClassMethods
{
    public class Program
    {
        public static void Main()
        {
            Customer C1 = null;
            Convert.ToString(C1);

            String Name = null;
            Convert.ToString(Name);

            Console.WriteLine("No Error");
            Console.ReadLine();
        }
    }
    public class Customer
    {
        public string FirstName { get; set; }
        public string LastName { get; set; }
    }
}

Now, with the above changes, run the application and it should be executed without any error. So in short, the Convert.ToString() method handles null, while the ToString() method doesn’t handle the Null and throws an exception. So it’s always a good programming practice to use the Convert.ToString() method will take care of the Null values and it is also safe to use.

In the next article onwards, I am going discuss checked and unchecked keyword in C# with examples. Here, in this article, I try to explain the Difference between convert.tostring and tostring method in C# with an example. I hope this article will help you with your needs. I would like to have your feedback. Please post your feedback, question, or comments about this article.

Перегрузка методов с несколькими параметрами типа

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

В качестве примера рассмотрим следующий обобщенный класс:

Рассмотрим приведенный выше код более подробно

Прежде всего обратите внимание на то, что класс Gen объявляется с двумя параметрами типа: T и V. В классе Gen метод Set() перегружается по параметрам типа T и V

Такой подход кажется вполне обоснованным, поскольку типы T и V ничем внешне не отличаются. Но подобная перегрузка таит в себе потенциальную неоднозначность. При таком объявлении класса Gen не соблюдается никаких требований к различению типов T и V. Например, нет ничего принципиально неправильного в том, что объект класса Gen будет сконструирован так, как показано ниже:

В данном случае оба типа, T и V, заменяются типом int. В итоге оба варианта метода Set() оказываются совершенно одинаковыми, что, разумеется, приводит к ошибке. Следовательно, при последующей попытке вызвать метод Set() для объекта notOK в методе Main() появится сообщение об ошибке вследствие неоднозначности во время компиляции.

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

Overloads

Возвращает этот экземпляр String; реальное преобразование не осуществляется.Returns this instance of String; no actual conversion is performed.

Возвращает этот экземпляр String; реальное преобразование не осуществляется.Returns this instance of String; no actual conversion is performed.

ToString(IFormatProvider)

Возвращает этот экземпляр String; реальное преобразование не осуществляется.Returns this instance of String; no actual conversion is performed.

Parameters

provider
IFormatProvider

(Зарезервирован.) Объект, предоставляющий сведения о форматировании, связанные с определенным языком и региональными параметрами.(Reserved) An object that supplies culture-specific formatting information.

Returns

String

Текущая строка.The current string.

Implements

Remarks

зарезервировано и сейчас не участвует в этой операции. is reserved, and does not currently participate in this operation.

Поскольку этот метод просто возвращает текущую строку без изменений, нет необходимости вызывать ее напрямую.Because this method simply returns the current string unchanged, there is no need to call it directly.

ToString()

Возвращает этот экземпляр String; реальное преобразование не осуществляется.Returns this instance of String; no actual conversion is performed.

Returns

String

Текущая строка.The current string.

Examples

В следующем примере демонстрируется метод ToString

Обратите внимание, что в примере явно не вызывается метод ToString.The following example demonstrates the ToString method.Note that the example does not explicitly call the ToString method. Вместо этого метод вызывается неявно функцией составного форматирования .Instead, the method is called implicitly by the composite formatting feature

Remarks

Поскольку этот метод просто возвращает текущую строку без изменений, нет необходимости вызывать ее напрямую.Because this method simply returns the current string unchanged, there is no need to call it directly. Обычно он вызывается неявно в операции составного форматирования, как показано в примере.It is usually called implicitly in a composite formatting operation, as the example shows.

Clone()


С этим читают