【问题标题】:how can i print out the type, size and range of a java data type ? esp those wtih modifiers?如何打印出 java 数据类型的类型、大小和范围?尤其是那些带有修饰符的?
【发布时间】:2011-07-07 16:42:37
【问题描述】:

目前我可以打印出a的字体大小和范围;;除了 bollean 之外的原始 java 数据类型,使用以下方法。

public class sizJ {

    public static void display(Class<?> type, int size, Number min, Number max) {
            System.out.printf("%-6s %-2s %-20s %s\n", type, size, min, max);
    }

    public static void main(String[] args) {
            System.out.printf("%s %-2s %-20s %s\n","type","size","min","max");
            display(Byte.TYPE, Byte.SIZE, Byte.MIN_VALUE, Byte.MAX_VALUE);
            display(Character.TYPE, Character.SIZE, (int) Character.MIN_VALUE, (int) Character.MAX_VALUE);
            display(Integer.TYPE, Integer.SIZE, Integer.MIN_VALUE, Integer.MAX_VALUE);
            display(Float.TYPE, Float.SIZE, Float.MIN_VALUE, Float.MAX_VALUE);
            display(Double.TYPE, Double.SIZE, Double.MIN_VALUE, Double.MAX_VALUE);
            display(Long.TYPE, Long.SIZE, Long.MIN_VALUE, Long.MAX_VALUE);
            display(Double.TYPE, Double.SIZE, Double.MIN_VALUE, Double.MAX_VALUE);

            display(SignedDouble.TYPE, Double.SIZE, Double.MIN_VALUE, Double.MAX_VALUE);
    }

}

从论坛复制的代码。

问题是我如何打印相同的内容,比如 signed long 或 signed char 或 unsigned int ?

请帮忙。

【问题讨论】:

  • 我想说只是打印出一个随机值(因为无符号类型是 Java 无论如何都不知道的)。顺便说一句,我在你的代码中发现了一个SignedDouble.TYPE:那是你的一些enum 吗? :-)

标签: java types modifier


【解决方案1】:

这里有很多事情要澄清...:

  1. Java 没有像 C 这样的无符号原语 - 顺便说一下,对于那些需要做很多 bit-twiddling 的人来说,这是一个重要的问题,例如实现哈希函数。没有unsigned 关键字,没有无符号类型,当然也没有相应的类型大小。

  2. Java只有八个primitive typesbooleanbytechardoublefloatintlongshort

    /li>
  3. Java 也有 8 个对应的类,主要用于 autoboxing,但也提供有关原始类型的信息,如您的示例代码所示。

  4. 修饰符(例如publicfinalstatic)仅影响原语的可见性和访问语义 - 不影响其基本属性,例如其大小或范围.

  5. 术语“数据类型”也指对象类型。 Java 没有 C sizeof 运算符的等价物,因为您不需要像在 C 中那样分配内存。如果您确实需要知道对象的内存占用,请查看 here .

【讨论】:

    【解决方案2】:

    Java 没有 sizeof 运算符来查找原始数据类型的大小,但所有 Java 原始包装器都提供了一个以位为单位的 SIZE 常量,可以除以 8 以获得数据类型的大小(以字节为单位)。

    class SizePrimitiveTypes
    {
      public static void main (String[] args)
      {
        System.out.println("Size of byte: " + (Byte.SIZE/8) + " bytes.");
        System.out.println("Size of short: " + (Short.SIZE/8) + " bytes.");
        System.out.println("Size of int: " + (Integer.SIZE/8) + " bytes.");
        System.out.println("Size of long: " + (Long.SIZE/8) + " bytes.");
        System.out.println("Size of char: " + (Character.SIZE/8) + " bytes.");
        System.out.println("Size of float: " + (Float.SIZE/8) + " bytes.");
        System.out.println("Size of double: " + (Double.SIZE/8) + " bytes.");
      }
    }
    

    【讨论】:

      猜你喜欢
      • 2012-08-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-11
      • 2023-04-01
      • 2019-03-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多