Статьи

Как написать C-подобную функцию Sizeof в Java

Если вы только начали изучать Java и пришли из C-фона, вы, возможно, заметили некоторую разницу между Java и C-языком программирования, например, String — это объект в Java, а не символьный массив с нулевым символом в конце. Точно так же в Java нет оператора sizeof (). Все значения примитивов имеют предопределенный размер, например, int составляет 4 байта, char — 2 байта, short — 2 байта, long и float — 8 байтов и так далее. Но если вам не хватает оператора sizeOf, то почему бы не сделать это задачей кодирования? Если вы в порядке, то ваша следующая задача — написать метод на Java, который может вести себя как оператор / функция sizeOf () для C и возвращает размер в байтах для каждого числового типа примитива, то есть для всех примитивных типов, кроме Boolean.

Многие из вас думают, почему мы не включаем Boolean? Разве это не просто нужно 1 бит для представления истинного и ложного значения? Ну, я не включаю Boolean в это упражнение, потому что размер boolean не является строго определенным в спецификации Java и варьируется между различными JVM.

Кроме того, насколько вам известно, размер примитивов в Java фиксирован, он не зависит от платформы.

Поэтому примитивная переменная int будет занимать 4 байта как в Windows, так и в Linux, как на 32-разрядных, так и на 64-разрядных компьютерах.

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

размер

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

Пример функции Java sizeof ()

Вот наша полная Java-программа для реализации оператора sizeof. Это не совсем размер, но его цель та же. sizeof возвращает, сколько памяти занимает определенный тип данных, и этот метод делает именно это.

001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
031
032
033
034
035
036
037
038
039
040
041
042
043
044
045
046
047
048
049
050
051
052
053
054
055
056
057
058
059
060
061
062
063
064
065
066
067
068
069
070
071
072
073
074
075
076
077
078
079
080
081
082
083
084
085
086
087
088
089
090
091
092
093
094
095
096
097
098
099
100
101
102
/**
 * Java Program to print size of primitive data types e.g. byte, int, short, double, float
 * char, short etc, in a method like C programming language's sizeof
 *
 * @author Javin Paul
 */
public class SizeOf{
 
    public static void main(String args[]) {
 
        System.out.println(" size of byte in Java is (in bytes) :  "
    + sizeof(byte.class));
        System.out.println(" size of short in Java is (in bytes) :"
    + sizeof(short.class));
        System.out.println(" size of char in Java is (in bytes) :"
    + sizeof(char.class));
        System.out.println(" size of int in Java is (in bytes) :"
    + sizeof(int.class));
        System.out.println(" size of long in Java is (in bytes) :"
    + sizeof(long.class));
        System.out.println(" size of float in Java is (in bytes) :"
    + sizeof(float.class));
        System.out.println(" size of double in Java is (in bytes) :"
    + sizeof(double.class));
 
    }
 
 
    /*
     * Java method to return size of primitive data type based on hard coded values
     * valid but provided by developer
     */
    public static int sizeof(Class dataType) {
        if (dataType == null) {
            throw new NullPointerException();
        }
        if (dataType == byte.class || dataType == Byte.class) {
            return 1;
        }
        if (dataType == short.class || dataType == Short.class) {
            return 2;
        }
        if (dataType == char.class || dataType == Character.class) {
            return 2;
        }
        if (dataType == int.class || dataType == Integer.class) {
            return 4;
        }
        if (dataType == long.class || dataType == Long.class) {
            return 8;
        }
        if (dataType == float.class || dataType == Float.class) {
            return 4;
        }
        if (dataType == double.class || dataType == Double.class) {
            return 8;
        }
        return 4; // default for 32-bit memory pointer
    }
 
 
    /*
     * A perfect way of creating confusing method name, sizeof and sizeOf
     * this method take advantage of SIZE constant from wrapper class
     */
    public static int sizeOf(Class dataType) {
        if (dataType == null) {
            throw new NullPointerException();
        }
        if (dataType == byte.class || dataType == Byte.class) {
            return Byte.SIZE;
        }
        if (dataType == short.class || dataType == Short.class) {
            return Short.SIZE;
        }
        if (dataType == char.class || dataType == Character.class) {
            return Character.SIZE;
        }
        if (dataType == int.class || dataType == Integer.class) {
            return Integer.SIZE;
        }
        if (dataType == long.class || dataType == Long.class) {
            return Long.SIZE;
        }
        if (dataType == float.class || dataType == Float.class) {
            return Float.SIZE;
        }
        if (dataType == double.class || dataType == Double.class) {
            return Double.SIZE;
        }
        return 4; // default for 32-bit memory pointer
    }
}
 
Output:
size of byte in Java is (in bytes) :  1
size of short in Java is (in bytes) :2
size of char in Java is (in bytes) :2
size of int in Java is (in bytes) :4
size of long in Java is (in bytes) :8
size of float in Java is (in bytes) :4
size of double in Java is (in bytes) :8

Вот и все в этом упражнении по программированию написания sizeof как метода в Java . Это на самом деле сложно, потому что вы не думаете о том, чтобы воспользоваться преимуществами предопределенного размера типов данных Java, равно как и о том, чтобы воспользоваться преимуществами
Константы SIZE, определенные в классах-оболочках, например, Integer или Double. Что ж, если вы можете найти любой другой способ определения размера примитивного типа данных, сообщите нам.

Смотрите оригинальную статью здесь: Как написать C-подобную функцию Sizeof в Java

Мнения, высказанные участниками Java Code Geeks, являются их собственными.