Кофе-брейк #190. Как преобразовать Integer в String. Статические и нестатические внутренние классы в Java
Источник: FreeCodeCampЭто руководство подскажет вам несколько способов преобразования целого числа (integer) в строку (string).Для преобразования переменных из одного типа данных в другой, в языке Java используются различные методы. В случае с конвертацией Integer в String можно применить один из перечисленных ниже способов:
- Использование метода Integer.toString() .
- Использование метода String.valueOf() .
- Использование метода String.format() .
- Использование класса DecimalFormat .
Как преобразовать целое число в строку в Java с помощью Integer.toString()
Метод Integer.toString() принимает целое число для преобразования в качестве параметра. Пример синтаксиса:
Integer.toString(INTEGER_VARIABLE)
Пример кода:
class IntToStr < public static void main(String[] args) < int age = 2; String AGE_AS_STRING = Integer.toString(age); System.out.println("The child is " + AGE_AS_STRING + " years old"); // The child is 2 years old >>
В данном примере мы создали целое число age и присвоили ему значение 2 . Чтобы преобразовать переменную age в строку, мы передали ее в качестве параметра методу Integer.toString(): Integer.toString(age) . Затем мы сохранили это новое строковое значение в строковой переменной с именем AGE_AS_STRING . И наконец, мы объединили новую строковую переменную с другими строками: «The child is » + AGE_AS_STRING + » years old» . Теперь возникает вопрос: возникнет ли ошибка, если мы просто соединим переменную age с этими другими строками без какого-либо преобразования?
class IntToStr < public static void main(String[] args) < int age = 2; System.out.println("The child is " + age + " years old"); // The child is 2 years old >>
Вывод получился такой же, как и в примере, где нам нужно было преобразовать целое число в строку. Но как мы узнаем, действительно ли преобразование типов сработало? Для этого мы можем проверить типы переменных, используя объект getClass() . Примерно вот так:
class IntToStr < public static void main(String[] args) < int age = 2; String AGE_AS_STRING = Integer.toString(age); System.out.println(((Object)age).getClass().getSimpleName()); // Integer System.out.println(AGE_AS_STRING.getClass().getSimpleName()); // String >>
Теперь мы можем убедиться, что при создании переменной age она была Integer , а после преобразования типа стала String .
Как преобразовать целое число в строку в Java с помощью String.valueOf()
Метод String.valueOf() также принимает переменную, которую нужно преобразовать в строку, в качестве параметра.
class IntToStr < public static void main(String[] args) < int age = 2; String AGE_AS_STRING = String.valueOf(age); System.out.println("The child is " + AGE_AS_STRING + " years old"); // The child is 2 years old >>
- Мы создали целое число (integer) с названием age .
- Мы передали целое число age в качестве параметра метода String.valueOf(): String.valueOf(age) .
System.out.println(((Object)age).getClass().getSimpleName()); // Integer System.out.println(AGE_AS_STRING.getClass().getSimpleName()); // String
Как преобразовать целое число в строку в Java с помощью String.format()
Метод String.format() принимает два параметра: спецификатор формата и форматируемую переменную. Вот пример:
class IntToStr < public static void main(String[] args) < int age = 2; String AGE_AS_STRING = String.format("%d", age); System.out.println("The child is " + AGE_AS_STRING + " years old"); // The child is 2 years old >>
В этом примере мы передали методу String.format() два параметра: «%d» и age . «%d» — это спецификатор формата, указывающий, что форматируемая переменная является целым числом. age , который является вторым параметром, будет преобразован в строку и сохранен в переменной AGE_AS_STRING . Также можно проверить типы переменных до и после преобразования:
System.out.println(((Object)age).getClass().getSimpleName()); // Integer System.out.println(AGE_AS_STRING.getClass().getSimpleName()); // String
Как преобразовать целое число в строку в Java с помощью DecimalFormat
Класс DecimalFormat используется для форматирования десятичных чисел в Java. Его можно применять по-разному, но сейчас мы будем использовать его для преобразования целого числа в строку. Перед вами пример:
import java.text.DecimalFormat; class IntToStr < public static void main(String[] args) < int age = 2; DecimalFormat DFormat = new DecimalFormat("#"); String AGE_AS_STRING = DFormat.format(age); System.out.println("The child is " + AGE_AS_STRING + " years old"); // The child is 2 years old System.out.println(((Object)age).getClass().getSimpleName()); // Integer System.out.println(AGE_AS_STRING.getClass().getSimpleName()); // String >>
- Чтобы иметь возможность использовать класс DecimalFormat в конкретном примере, мы импортировали его: import java.text.DecimalFormat; .
- Мы создали целочисленную переменную age .
- Затем мы создали новый объект класса DecimalFormat с названием DFormat .
- Используя объекта метода format() , мы преобразовали age в строку: DFormat.format(age); .
Заключение
В этой статье мы говорили о преобразовании целых чисел в строки в Java. Вы увидели примеры кода с использованием трех разных методов: Integer.toString() , String.valueOf() , String.format() , а также класса DecimalFormat . В каждом из примеров показан процесс преобразования и проверка типа данных переменной до и после преобразования.
Статические и нестатические внутренние классы в Java
Источник: Medium Благодаря этой статье вы узнаете, в чем состоят различия между статическими и нестатическими внутренними классами в Java. В Java нестатические внутренние классы (non-static inner classes, также известные как внутренние классы или внутренние объекты) имеют неявную ссылку на окружающий экземпляр (enclosing instance) внешнего класса. Это означает, что они имеют доступ к переменным экземпляра и методам внешнего класса и могут использоваться для создания нескольких экземпляров внутреннего класса, связанных с разными экземплярами внешнего класса. Давайте рассмотрим следующий код:
class Outer < private int x; class Inner < public void printX() < System.out.println(x); >> > Outer outer1 = new Outer(); outer1.x = 5; Outer.Inner inner1 = outer1.new Inner(); inner1.printX(); // prints 5 Outer outer2 = new Outer(); outer2.x = 10; Outer.Inner inner2 = outer2.new Inner(); inner2.printX(); // prints 10
Здесь у класса Outer есть внутренний класс Inner , у которого имеется метод printX . А он, в свою очередь, печатает значение x из окружающего экземпляра Outer . Код создает два экземпляра Outer ( outer1 и outer2 ) и два экземпляра Inner ( inner1 и inner2 ), каждый из которых связан с разным экземпляром Outer . Когда printX вызывает inner1 и inner2 , он печатает значение x из соответствующего экземпляра Outer . Поскольку нестатические внутренние классы имеют неявную ссылку на окружающий экземпляр, им требуется дополнительная память для хранения этой ссылки. Это означает, что они менее эффективно используют память, чем статические внутренние классы, которые не имеют неявной ссылки на включающий экземпляр и не требуют для этой цели дополнительной памяти. С другой стороны, статические внутренние классы не могут получить доступ к переменным или методам экземпляра внешнего класса, поэтому их возможности ограничены. Они полезны, когда вы хотите определить класс, тесно связанный с внешним классом и не нуждающийся в доступе к его переменным или методам экземпляра. Нестатические внутренние классы (также известные как внутренние классы или внутренние объекты) полезны, когда вы хотите определить класс, который тесно связан с другим классом и имеет доступ к переменным экземпляра и методам внешнего класса.
Использование нестатических внутренних классов
- Когда внутреннему классу необходимо получить доступ к переменным экземпляра или методам внешнего класса, которые не являются static . Поскольку нестатические внутренние классы имеют неявную ссылку на окружающий экземпляр внешнего класса, они могут напрямую обращаться к нестатическим переменным и методам экземпляра.
- Когда вы хотите определить несколько экземпляров внутреннего класса, связанных с разными экземплярами внешнего класса. Например, вы можете захотеть создать нестатический внутренний класс Button для класса Dialog , где каждый экземпляр Button связан с другим экземпляром Dialog и может получить доступ к переменным экземпляра и методам экземпляра Dialog .
- Когда вы хотите определить класс, который используется только в контексте внешнего класса и не предназначен для независимого использования. Доступ к нестатическим внутренним классам возможен только из внешнего класса, поэтому они более инкапсулированы и менее подвержены непреднамеренному использованию.
Использование статических внутренних классов
Мы можем использовать статические внутренние классы, если нам не нужен доступ к каким-либо переменным экземпляра или методам внешнего класса, и по этой причине им не нужно иметь неявную ссылку на окружающий экземпляр внешнего класса. Это делает их более эффективными с точки зрения использования памяти, чем нестатические внутренние классы, которые имеют неявную ссылку на окружающий экземпляр. Допустим, нам нужно спроектировать график, который содержит траектории (edges) и точки пересечения (nodes). Классы Node и Edge тесно связаны с классом Graph и используются только в контексте объекта Graph . Определение их как статических внутренних классов дает понять, что они являются частью класса Graph и не предназначены для независимого использования.
public class Graph < Map nodeMap; public Graph () < nodeMap = new HashMap<>(); > static class Node < String name; List edgeList; public Node(String name) < this.name = name; edgeList = new ArrayList(); >> static class Edge < Node source; Node Destination; String type; public Edge(Node source, Node destination, String type) < this.Destination = destination; this.source = source; this.type = type; >> >
Статические внутренние классы не могут получить доступ к переменным или методам экземпляра Вот пример, иллюстрирующий тот факт, что статические внутренние классы не могут получить доступ к переменным или методам экземпляра внешнего класса:
class Outer < private int x; static class Inner < public void printX() < System.out.println(x); // compilation error: cannot access x >> >
- Создать переменные или методы экземпляра static . Это позволит внутреннему классу обращаться к ним, используя имя внешнего класса (например, Outer.x ).
- Передать экземпляр внешнего класса внутреннему классу и сохранить его в поле. Затем внутренний класс может получить доступ к переменным экземпляра или методам внешнего класса через это поле.
class Outer < private int x; public void setX(int x) < this.x = x; >static class Inner < Outer outer; public Inner(Outer outer) < this.outer = outer; >public void printX() < System.out.println(outer.x); >> > Outer outer = new Outer(); outer.setX(5); Outer.Inner inner = new Outer.Inner(outer); inner.printX(); // prints 5
В данном примере у класса Outer есть нестатический метод setX , который задает значение x , и статический внутренний класс Inner с полем outer типа Outer . У класса Inner есть конструктор, который принимает экземпляр Outer и сохраняет его в поле outer . Затем метод printX класса Inner может получить доступ к полю x экземпляра outer , используя нотацию outer.x .
Конвертация строки в целое число на Java
Следовательно, вам нужно преобразовать String в int, прежде чем выполнять над ним числовые операции.
Преобразование строки в целое число с использованием Integer.parseInt()
int = Integer.parseInt();
Передайте строковую переменную в качестве аргумента. Это преобразует Java String в Java Integer и сохраняет его в указанной целочисленной переменной. Проверьте фрагмент кода ниже
class StrConvert < public static void main(String []args)< String strTest = "100"; int iTest = Integer.parseInt(strTest); System.out.println("Actual String:"+ strTest); System.out.println("Converted to Int:" + iTest); //This will now show some arithmetic operation System.out.println("Arithmetic Operation on Int: " + (iTest/4)); >>
Actual String:100 Converted to Int:100 Arithmetic Operation on Int: 25
Преобразование строки в целое число с использованием Integer.valueOf()
Метод Integer.valueOf() также используется для преобразования String в Integer в Java.
Ниже приведен пример кода, демонстрирующий процесс использования метода Integer.valueOf():
public class StrConvert < public static void main(String []args)< String strTest = "100"; //Convert the String to Integer using Integer.valueOf int iTest = Integer.valueOf(strTest); System.out.println("Actual String:"+ strTest); System.out.println("Converted to Int:" + iTest); //This will now show some arithmetic operation System.out.println("Arithmetic Operation on Int:" + (iTest/4)); >>
Actual String:100 Converted to Int:100 Arithmetic Operation on Int:25
NumberFormatException
NumberFormatException генерируется, если вы пытаетесь проанализировать недопустимую числовую строку. Например, строка «Guru99» не может быть преобразована в целое число.
public class StrConvert < public static void main(String []args)< String strTest = "javahelp"; int iTest = Integer.valueOf(strTest); System.out.println("Actual String:"+ strTest); System.out.println("Converted to Int:" + iTest); >>
Приведенный выше пример дает следующее исключение в выводе:
Exception in thread "main" java.lang.NumberFormatException: For input string: "javahelp"
Руководство по программированию на C#. Приведение и преобразование типов
Поскольку код C# является статически типизированным во время компиляции, после объявления переменной ее нельзя объявить повторно или назначить ей значения другого типа, если этот тип невозможно неявно преобразовать в тип переменной. Например, string невозможно неявно преобразовать в int . Поэтому после объявления i как int нельзя назначить ей строку «Hello», как показано в следующем коде:
int i; // error CS0029: Cannot implicitly convert type 'string' to 'int' i = "Hello";
Тем не менее иногда может потребоваться скопировать значение в переменную или параметр метода другого типа. Например, может потребоваться передать целочисленную переменную в метод, параметр которого имеет тип double . Или может понадобиться присвоить переменную класса переменной типа интерфейса. Такого рода операции называются преобразованиями типа. В C# можно выполнять следующие виды преобразований.
- Неявные преобразования. Специальный синтаксис не требуется, так как преобразование всегда завершается успешно и данные не будут потеряны. Примеры включают преобразования из меньших в большие целочисленные типы и преобразования из производных классов в базовые классы.
- Явные преобразования (приведения) . Для явных преобразований требуется выражение приведения. Приведение требуется, если в ходе преобразования данные могут быть утрачены или преобразование может завершиться сбоем по другим причинам. Типичными примерами являются числовое преобразование в тип с меньшей точностью или меньшим диапазоном и преобразование экземпляра базового класса в производный класс.
- Пользовательские преобразования. Такие преобразования выполняются специальными методами, которые можно определить для включения явных и неявных преобразований между пользовательскими типами без связи «базовый класс — производный класс». Дополнительные сведения см. в разделе Операторы пользовательского преобразования.
- Преобразования с использованием вспомогательных классов. Чтобы выполнить преобразование между несовместимыми типами, например целыми числами и объектами System.DateTime или шестнадцатеричными строками и массивами байтов, можно использовать классы System.BitConverter и System.Convert, а также методы Parse встроенных числовых типов, такие как Int32.Parse. Дополнительные сведения см. в руководствах по преобразованию массива байтов в значение типа int, преобразованию строки в число и преобразованию из шестнадцатеричных строк в числовые типы.
Неявные преобразования
Для встроенных числовых типов неявное преобразование можно выполнить, если сохраняемое значение может уместиться в переменной без усечения или округления. При использовании целочисленных типов это означает, что диапазон исходного типа является надлежащим подмножеством диапазона для целевого типа. Например, переменная типа long (64-разрядное целое число) может хранить любое значение, которое может хранить переменная int (32-разрядное целое число). В следующем примере компилятор неявно преобразует значение num справа в тип long перед назначением bigNum .
// Implicit conversion. A long can // hold any value an int can hold, and more! int num = 2147483647; long bigNum = num;
Полный список всех неявных числовых преобразований см. в разделе Таблица неявных числовых преобразований в статье Встроенные числовые преобразования.
Для ссылочных типов неявное преобразование всегда предусмотрено из класса в любой из его прямых или косвенных базовых классов или интерфейсов. Никакой специальный синтаксис не требуется, поскольку производный класс всегда содержит все члены базового класса.
Derived d = new Derived(); // Always OK. Base b = d;
Явные преобразования
Тем не менее если преобразование нельзя выполнить без риска потери данных, компилятор требует выполнения явного преобразования, которое называется приведением. Приведение — это способ явно указать компилятору, что необходимо выполнить преобразование и что вам известно, что может произойти потеря данных или приведение может завершиться сбоем во время выполнения. Чтобы выполнить приведение, укажите тип, в который производится приведение, в круглых скобках перед преобразуемым значением или переменной. В следующей программе выполняется приведение типа double в int. Программа не будет компилироваться без приведения.
class Test < static void Main() < double x = 1234.7; int a; // Cast double to int. a = (int)x; System.Console.WriteLine(a); >> // Output: 1234
Полный список всех поддерживаемых явных числовых преобразований см. в разделе Таблица явных числовых преобразований в статье Встроенные числовые преобразования.
Для ссылочных типов явное приведение является обязательным, если необходимо преобразовать базовый тип в производный тип:
// Create a new derived type. Giraffe g = new Giraffe(); // Implicit conversion to base type is safe. Animal a = g; // Explicit conversion is required to cast back // to derived type. Note: This will compile but will // throw an exception at run time if the right-side // object is not in fact a Giraffe. Giraffe g2 = (Giraffe)a;
Операция приведения между ссылочными типами не меняет тип времени выполнения базового объекта; изменяется только тип значения, который используется в качестве ссылки на этот объект. Дополнительные сведения см. в разделе Полиморфизм.
Исключения преобразования типов во время выполнения
В некоторых преобразованиях ссылочных типов компилятор не может определить, будет ли приведение допустимым. Есть вероятность, что правильно скомпилированная операция приведения завершится сбоем во время выполнения. Как показано в следующем примере, приведение типа, завершившееся сбоем во время выполнения, вызывает исключение InvalidCastException.
class Animal < public void Eat() =>System.Console.WriteLine("Eating."); public override string ToString() => "I am an animal."; > class Reptile : Animal < >class Mammal : Animal < >class UnSafeCast < static void Main() < Test(new Mammal()); // Keep the console window open in debug mode. System.Console.WriteLine("Press any key to exit."); System.Console.ReadKey(); >static void Test(Animal a) < // System.InvalidCastException at run time // Unable to cast object of type 'Mammal' to type 'Reptile' Reptile r = (Reptile)a; >>
Метод Test имеет параметр Animal , поэтому явное приведение a аргумента к Reptile формирует опасное допущение. Более безопасно будет не делать допущений, а проверить тип. C# предоставляет оператор is, чтобы можно было проверить совместимость перед фактическим выполнением приведения. Дополнительные сведения см. в статье Практическое руководство. Безопасное приведение с помощью сопоставления шаблонов, а также операторов is и as.
Спецификация языка C#
См. также
- Руководство по программированию на C#
- Типы
- Выражение приведения
- Операторы пользовательского преобразования
- Обобщенное преобразование типов
- Практическое руководство. Преобразование строки в число
Совместная работа с нами на GitHub
Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.
The .NET documentation is open source. Provide feedback here.
Обратная связь
Отправить и просмотреть отзыв по
Преобразование строки в IntStream на Java
Если у вас есть строка и вы хотите преобразовать ее в IntStream со значениями ASCII, то это легко сделать с помощью приведенного ниже кода.
Для работы с классом IntStream вам необходимо импортировать следующий пакет:
import java.util.stream.IntStream;
Допустим, наша строка выглядит следующим образом:
String str = "Benz";
Преобразуйте приведенную выше строку в IntStream:
IntStream stream = str.chars();
Пример
import java.util.stream.IntStream; public class Demo < public static void main(String[] args) < String str = "Benz"; System.out.println("String to be converted = " + str); System.out.println("String converted to IntStream (ASCII Values) EnlighterJSRAW" data-enlighter-language="java" data-enlighter-theme="eclipse">String to be converted = Benz String converted to IntStream (ASCII Values) = 66 101 110 122
Средняя оценка 0 / 5. Количество голосов: 0
Спасибо, помогите другим — напишите комментарий, добавьте информации к статье.
Или поделись статьей
Видим, что вы не нашли ответ на свой вопрос.
Помогите улучшить статью.
Напишите комментарий, что можно добавить к статье, какой информации не хватает.