Главная страница
Навигация по странице:

  • StringBuilder

  • public

  • new

  • Оператор Описание

  • Примитивный тип Класс-обертка

  • Примитивные типы данных java. экзамен по примитивным данным. Тип данных (название)


    Скачать 38.13 Kb.
    НазваниеТип данных (название)
    АнкорПримитивные типы данных java
    Дата02.05.2022
    Размер38.13 Kb.
    Формат файлаdocx
    Имя файлаэкзамен по примитивным данным.docx
    ТипДокументы
    #507712

    Какие примитивные типы есть в Java

    1. Ответ: В Java существует четыре типа целочисленных данных: byte, short, int и long, Для работы с действительными числами используются типы float и double (на практике обычно используется тип double). С помощью этих типов реализует­ся формат числа с плавающей точкой, для символьных данных используется тип char, а что касается логического типа boolean, то переменные этого типа могут при­нимать всего два значения: true (истина) и false (ложь).

    Размерность примитивных типов

    Ответ:

    Тип данных (название)

    Количе­ство битов

    Описание

    byte

    8

    Целые числа в диапазоне от –128 до 127

    short

    16

    Целые числа в диапазоне от –32 768 до 32 767

    int

    32

    Целые числа в диапазоне от –2147483648 до 2147483647

    long

    64

    Целые числа в диапазо­не от –9223372036854775808 до 9223372036854775807

    float

    32

    Действительные числа. Минимальный шаг дискретности (точность) составляет величину 3,4 × 10–38, максимальное зна­чение (по модулю) — 3,4 × 1038

    double

    64

    Действительные числа (двойной точ­ности). Минимальный шаг дискрет­ности (точность) составляет величину 1,7 × 10–308, максимальное значение (по модулю) — 1,7 × 10308

    char

    16

    Тип для представления символьных значе­ний. Реализуются символы с кодами от 0 до 65 536

    boolean

    Зависит от вир­туальной машины

    Логический тип данных. Переменная этого типа может принимать два значения: true (истина) и false (ложь)

    Что такое явные и неявные приведения, с чем связано их наличие?

    Ответ: Каждый базовый тип данных занимает определенное количество байт памяти. Это накладывает ограничение на операции, в которые вовлечены различные типы данных. Если операция преобразования типов предполагает указание в скобках того типа, к которому надо преобразовать значение – это явное приведение к типу данных. Например, в случае операции (byte)a, идет преобразование данных типа int в тип byte. В итоге мы получим значение типа byte.

    1

    2

    3

    int a = 4;

    byte b = (byte)a;  // преобразование типов: от типа int к типу byte

    System.out.println(b); // 4

    Некоторые виды преобразований выполняются неявно, автоматически.

    byte -> short -> int -> long

    int -> double

    short -> float -> double

    char -> int

    Автоматические преобразования с потерей точности

    Некоторые преобразования могут производиться автоматически между типами данных одинаковой разрядности или даже от типа данных с большей разрядностью к типа с меньшей разрядностью. Это следующие цепочки преобразований: int -> float, long -> float и long -> double. Они производятся без ошибок, но при преобразовании мы можем столкнуться с потерей информации.

    Например:

    1

    2

    3

    int a = 2147483647;

    float b = a;            // от типа int к типу float

    System.out.println(b);  // 2.14748365E9

    Какие данные мы рискуем потерять при явных приведениях?

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

    1

    2

    3

    int a = 258;

    byte b = (byte) a;

    System.out.println(b);      // 2

    Результатом будет число 2. В данном случае число 258 вне диапазона для типа byte (от -128 до 127), поэтому произойдет усечение значения. Почему результатом будет именно число 2?

    Число a, которое равно 258, в двоичном системе будет равно 00000000 00000000 00000001 00000010. Значения типа byte занимают в памяти только 8 бит. Поэтому двоичное представление числа int усекается до 8 правых разрядов, то есть 00000010, что в десятичной системе дает число 2.

    При сложении char short какой результирующий тип получим?

    Ответ:

    • если один из операндов операции относится к типу double, то и второй операнд преобразуется к типу double

    • если предыдущее условие не соблюдено, а один из операндов операции относится к типу float, то и второй операнд преобразуется к типу float

    • если предыдущие условия не соблюдены, один из операндов операции относится к типу long, то и второй операнд преобразуется к типу long

    • иначе все операнды операции преобразуются к типу int

    Значит при сложении char short мы получим тип int.

    StringBuilder.

    Ответ: StringBuilder – это изменяемая последовательность символов. Этот класс предоставляет API, совместимый с StringBuffer, но без гарантии синхронизации. 

    Основными операциями над a StringBuilder являются методы append и insert, которые перегружены, чтобы принимать данные любого типа. Каждый из них эффективно преобразует данные в строку, а затем добавляет или вставляет символы этой строки в построитель строк. Метод append всегда добавляет эти символы в конец построителя; метод insert добавляет символы в указанную точку.

    Например, если z ссылается на объект построителя строк, текущим содержимым которого является " start", то вызов метода z.append("le")приведет к тому, что построитель строк будет содержать " startle", тогда z.insert(4, "le")как построитель строк будет содержать " starlet".

    В общем, если sb ссылается на экземпляр a StringBuilder, то sb.append(x)имеет тот же эффект, что и sb.insert(sb.length(), x). У каждого StringBuilder есть емкость. Пока длина последовательности символов, содержащейся в построителе строк, не превышает емкости, нет необходимости выделять новый внутренний буфер. Если внутренний буфер переполняется, он автоматически увеличивается.

    Разница между String, StringBuilder и StringBuffer?

    Ответ:

    Если метод, вызываемый объектом StringBuilder, производит изменения

    в его содержимом, то это не приводит к созданию нового объекта, как в случае объекта String, а изменяет текущий объект StringBuilder.

    Экземпляры StringBuilder не безопасны для использования несколькими потоками. Если такая синхронизация требуется, то рекомендуется использовать StringBuffer.

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

    Как добавить Stringу в pool строк?

    Ответ:

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

    Когда мы объявляем переменную типа String и присваиваем ей строковый литерал, то JVM обращается в пул строк и ищет там такое же значение. Если пул содержит необходимое значение, то компилятор просто возвращает ссылку на соответствующий адрес строки без выделения дополнительной памяти. Если значение не найдено, то новая строка будет интернирована, а ссылка на нее возвращена и присвоена переменной. В Java существует возможность вручную выполнить интернирование строки в пул путем вызова метода intern() у объекта типа String.

    Например, добавив метод intern() к созданным при помощи конструктора строкам:

    public class StringExampleFive {
    public static void main(String[] args) {

    String str1 = "TopJava";

    String str2 = "TopJava";

    String str3 = (new String("TopJava")).intern();

    String str4 = (new String("TopJava")).intern();

    Поясним результат. Строки str1 и str2 добавлены в пул строк на этапе компиляции. Во время выполнения программы происходит конкатенация строки «interned «со значением строки str2, с последующим интернированием получившейся строки в пул строк (благодаря методу intern ()). Но, так как пул строк уже содержит строку «interned TopJava», объекту String str3 будет присвоена ссылка на строку в пуле строк.

    Pool примитивов

    Ответ:

    В Java есть пул(pool) целых чисел в промежутке [-128;127]. Т.е. если мы создаем Integer в этом промежутке, то вместо того, чтобы каждый раз создавать новый объект, JVM берет их из пула. Стоит заметить, что при использовалось ключевое слово new мы создаем новый объект и тогда уже создается новая ссылка.

    Неизменяемые типы

    Ответ:

    Если переменную объявить и инициализировать с ключевым словом final, то такая переменная становится константой. Изменить значение константы в процессе выполнения программы нельзя.

    Логические операторы

    Ответ:

    Оператор

    Описание

    &

    Логическое AND (И)

    &&

    Сокращённое AND

    |

    Логическое OR (ИЛИ)

    ||

    Сокращённое OR

    ^

    Логическое XOR (исключающее OR (ИЛИ))

    !

    Логическое унарное NOT (НЕ)

    Отличие операторов сокращенных логических операторов и полных

    Ответ:

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

    То есть иногда результат выражения однозначно определён уже по первому операнду:

    1. Если первый операнд && равен false, то второй не вычисляется, так как уже понятно, что результат всего выражения будет false.

    2. Если первый операнд || равен true, то второй не вычисляется, так как уже понятно, что || вернёт true.

    && и || используют как операторы булевой логики. Они оперируют значениями только булева типа и применяются только в логических выражениях.

    Оператор XOR. Представить таблицу истинности для него

    Ответ:

    Исключающее «ИЛИ» (XOR): строгая дизъюнкция, логическое вычитание

    ^

    true ^ true

    false ^ false

    true ^ false

    false ^ true

    false

    false

    true

    true

    Что такое условные конструкции?

    Ответ:

    Данные конструкции позволяют направить работу программы по одному из путей в зависимости от определенных условий.

    В языке Java используются следующие условные конструкции: if..else и switch..case и тернерный оператор

    Конструкция if/else


    Выражение if/else проверяет истинность некоторого условия и в зависимости от результатов проверки выполняет определенный код: После ключевого слова if ставится условие. И если это условие выполняется, то срабатывает код, который помещен в далее в блоке if после фигурных скобок.




    if(num1>num2){

        System.out.println("Первое число больше второго");

    }else{

        System.out.println("Первое число меньше второго");

    }

    Конструкция switch


    Конструкция switch/case аналогична конструкции if/else, так как позволяет обработать сразу несколько условий:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    int num = 8;

    switch(num){

                 

        case 1:

            System.out.println("число равно 1");

            break;

        case 8:

            System.out.println("число равно 8");

            num++;

            break;

        case 9:

            System.out.println("число равно 9");

            break;

        default:

            System.out.println("число не равно 1, 8, 9");

    }

    После ключевого слова switch в скобках идет сравниваемое выражение. Значение этого выражения последовательно сравнивается со значениями, помещенными после операторов сase. И если совпадение найдено, то будет выполняет соответствующий блок сase.

    В конце блока сase ставится оператор break, чтобы избежать выполнения других блоков. Если мы хотим также обработать ситуацию, когда совпадения не будет найдено, то можно добавить блок default. Хотя блок default необязателен.

    Тернарная операция


    Тернарную операция имеет следующий синтаксис: [первый операнд - условие] ? [второй операнд] : [третий операнд]. Таким образом, в этой операции участвуют сразу три операнда. В зависимости от условия тернарная операция возвращает второй или третий операнд: если условие равно true, то возвращается второй операнд; если условие равно false, то третий. Например:

    1

    2

    3

    4

    int x=3;

    int y=2;

    int z = x
    System.out.println(z);

    Здесь результатом тернарной операции является переменная z. Сначала проверяется условие x
    Что такое char? Почему над ним можно выполнять арифметические операции?

    Ответ:

    Для хранения символов Java использует специальный тип char.

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

    Стандартные символы ASCII можно выводить сразу. Если нужно вывести специальный символ из Unicode, то можно воспользоваться шестнадцатеричным представлением кода в escape-последовательности - надо указать обратную наклонную черту и четыре цифры после u. Например:
    char myChar = '\u0054';

    Хотя тип char используется для хранения Unicode-символов, его можно использовать как целочисленный тип, используя сложение или вычитание.

    Какая размерность у boolean

    Ответ:

    Рзмер boolean-значенией в массиве типов boolean

    Ответ:

    Какие есть циклы в Java?

    Ответ:

    Для управления конструкциями, которые обычно называются ц,иклами, в Java

    предоставляются операторы for, while и do-while. Вам, должно быть, известно,

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

    пока не будет удовлетворено условие завершения цикла.

    Чем отличаются друг от друга?

    Ответ:

    Оператор цикла while является самым простым для организации циклов

    в Java. В начале цикла while вычисляется условное выражение, поэтому тело цикла

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

    while (условие) {

    // тело цикла

    }

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

    Для этой цели в Java предоставляется цикл, который называется do-while.

    do {

    // тело цикла

    } while (условие)

    Общая форма традиционной разновидности оператора цикла f or выглядит

    следующим образом:

    fоr (инициализация; условие; итерация) {

    // тело цикла

    }

    Или for (a=l, Ь=4; а<Ь; а++, Ь--)

    Цикл повторяется, и на каждом его шаге сначала вычисляется условное выражение, потом выполняется тело цикла, а после этого вычисляется итерационное выражение.

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

    выражения не станет ложным.

    Цикл for each?

    Ответ:

    оператор цикла for в стиле for each автоматически

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

    Повторение цикла for в стиле for each выполняется до тех пор, пока не будут

    перебраны все элементы массива, но этот цикл можно прервать и раньше, используя

    оператор break.

    int sum = О;

    int nums[J = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

    /!использовать цикл for в стиле for each для

    // вывода и суммирования значений из части массива

    for(int х : nums) {

    System.out.println("Знaчeниe равно: " + х);

    sum += х;

    if(x == 5) break; //прервать цикл после

    //получения 5 значений

    System.out.println(

    "Сумма пяти первых элементов равна: " + sum);

    Что такое рекурсия?

    Ответ:

    Недостатки и преимущества?

    Ответ:

    2 случая (правила/условия) в рекурсивном алгоритме?

    Ответ:

    Рекурсивная функция всегда должна знать, когда ей нужно остановиться. В рекурсивной функции всегда есть два случая: рекурсивный и граничный случаи. Рекурсивный случай – когда функция вызывает саму себя, то есть у нее есть размерный шаг, а граничный – когда функция перестает себя вызывать. Наличие граничного случая и предотвращает зацикливание.

    Какие классы-обертки знаешь?

    Ответ:

    Примитивный тип

    Класс-обертка

    byte

    Byte

    short

    Short

    char

    Character

    int

    Integer

    long

    Long

    float

    Float

    double

    Double

    boolean

    Boolean

    Что такое Autoboxing, unboxing и когда они происходят автоматически?

    Ответ:

    Автоупаковка и автораспаковка объектов


    Автоупаковка (autoboxing) – это автоматическое преобразование, выполненное компилятором Java из примитива в соответствующий ему тип класса оболочки Java. Это все равно, что использовать valueOf следующим образом :

    // Автоупаковка

    Integer integer1 = 3;

    Integer integer2 = Integer.valueOf(3);

    Автораспаковка (unboxing) – это преобразование класса-обёртки в соответствующий ему примитивный тип. Если при распаковке класс-обёртка был равен null, произойдет исключение java.lang.NullPointerException.

    Поскольку арифметические операторы и операторы сравнения (исключение == и !=) применяются только к примитивным типам, приходилось делать распаковку вручную, что заметно снижало читабельность выражений, делая их громоздкими.

    Integer i1 = new Integer(14);

    Integer i2 = new Integer(28);

    System.out.println(i1.intValue() > i2.intValue());

    Благодаря автораспаковке можно смело использовать выражения, пренебрегая методами конвертации. Теперь это контролирует компилятор Java.

    System.out.println(i1 > i2);

    Какая максимальная длина массива?

    Ответ:

    255

    Что такое массив и какие на нём есть ограничения?

    Ответ:

    Массив - это группа однотипных переменных, для обращения к которым используется

    общее имя. В языке Java допускается создание массивов любого типа

    и разной размерности. Доступ к конкретному элементу массива осуществляется

    по его индексу. Массивы предоставляют удобный способ группирования связанной

    вместе информации.

    По существу, одномерные массивы представляют собой список однотипных

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

    требуемого типа. Общая форма объявления одномерного массива выглядит следующим

    образом:

    тип имя_переменной[];

    month_days = new int[12];

    Подведем краткий итог: процесс создания массива происходит в два этапа.

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

    операции new необходимо зарезервировать память для хранения массива

    и присвоить ее переменной массива.

    Максимальная размерность многомерного массива

    Ответ:

    Переведи число X (любое) из десятичной в двоичную, и число Y (любое) из двоичной в десятичную

    Ответ:

    Инкременты, декременты, отличия.

    Ответ:

    Почему 0.1 + 0.7 != 0.8 ?

    Ответ:

    Что такое continue и break?

    Ответ:

    В языке Java оператор break находит три применения. Во-первых, он завершает последовательность операторов в операторе swi t ch. Во-вторых, его можно использовать для выхода из цикла. И, в-третьих, этот оператор можно применять в качестве "цивилизованной" формы оператора безусловного перехода goto.

    Иногда требуется, чтобы повторение цикла осуществлялось с более раннего

    оператора в его теле. Это означает, что на данном конкретном шаге может воз-

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

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

    его тела. Для выполнения этого действия служит оператор continue. В циклах

    while и do-while оператор continue вызывает передачу управления непосредственно

    условному выражению, управляющему циклом. В цикле for управление

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

    Во всех трех разновидностях циклов любой промежуточный код пропускается.


    Где находятся параметры и аргументы метода

    Ответ:

    Чем отличается метод от функции

    Ответ:

    В Джава функции называют методами. Есть еще разделение, что методы в джава могут быть как функции или процедуры, функции - возвращают значение, процедуры это void метод, но если обобщить: функция = метод. В джава мы говорим что это метод, который внутри тоже может содержать вызовы других методов, создавая матрешку.


    написать администратору сайта