原始类型int实际如何转换为String? - java

首先,我的问题是关于如何将原始类型int转换为String而无需成为Object,从而没有toString()方法来获取String值。我非常了解您如何看似“在Java中将原始类型int的变量转换为String。我使用的最简单方法是:

int x = 5;
String y = "" + x;

这很好,但是我的问题是:
由于原始类型int不是对象,因此没有任何方法,例如toString()方法,据我所知,这样才能获取变量的String值...如果没有此方法,如何识别变量的值基本方法?

参考方案

通常,通过调用以下两种方法之一将int值转换为String:

  • StringBuilder.append(int i)
  • String.valueOf(int i)
  • 对于其他原始值,将使用这两种方法的相应重载。

    StringBuilder.append()

    编译器将"" + x表达式实现为:

    new StringBuilder().append("").append(x).toString()
    

    x声明为int,这意味着将调用带有append()参数的int重载。

    append(int) 的源代码(Java 1.8.0_65)为:

    @Override
    public StringBuilder append(int i) {
        super.append(i);
        return this;
    }
    

    super调用导致:

    public AbstractStringBuilder append(int i) {
        if (i == Integer.MIN_VALUE) {
            append("-2147483648");
            return this;
        }
        int appendedLength = (i < 0) ? Integer.stringSize(-i) + 1
                                     : Integer.stringSize(i);
        int spaceNeeded = count + appendedLength;
        ensureCapacityInternal(spaceNeeded);
        Integer.getChars(i, spaceNeeded, value);
        count = spaceNeeded;
        return this;
    }
    

    String.valueOf()

    在不使用字符串连接的情况下将值转换为String时,通常是通过调用String.valueOf()来完成的。对于表示 intvalueOf(int)值:

    public static String valueOf(int i) {
        return Integer.toString(i);
    }
    

    Integer.toString()调用为:

    public static String toString(int i) {
        if (i == Integer.MIN_VALUE)
            return "-2147483648";
        int size = (i < 0) ? stringSize(-i) + 1 : stringSize(i);
        char[] buf = new char[size];
        getChars(i, size, buf);
        return new String(buf, true);
    }
    

    Integer.getChars()

    如您所见,两者都是通过实际调用package-private方法Integer.getChars(int i, int index, char[] buf)来实现的。

    它们实际上都没有创建Integer实例,即使JLS暗示会这样做。

    Java-将int更改为ascii - java

    java有没有办法将int转换为ascii符号? 参考方案 您是否要将int转换为char?:int yourInt = 33; char ch = (char) yourInt; System.out.println(yourInt); System.out.println(ch); // Output: // 33 // ! 还是要将int转换为Stri…

    Java:我可以在Hashmaps中使用数组吗? - java

    我可以在Hashmaps中使用数组吗?如果是这样,则声明这种哈希图的确切语法是什么?谢谢 参考方案 数组也是对象。甚至像int[]这样的原始数组。Map<String,String[]> map = new HashMap<String,String[]>();

    Java:找到特定字符并获取子字符串 - java

    我有一个字符串4.9.14_05_29_16_21,我只需要获取4.9。数字各不相同,所以我不能简单地获得此char数组的前三个元素。我必须找到最正确的.并将其子字符串化直到那里。我来自Python,因此我将展示Python的实现方法。def foobar(some_string): location = some_string.rfind('.&…

    Java string.hashcode()提供不同的值 - java

    我已经在这个问题上停留了几个小时。我已经注释掉所有代码,认为这与数组超出范围有关,但是这种情况仍在发生。我正在尝试使用扫描仪从文件中读取输入,存储数据并稍后使用哈希码获取该数据。但是哈希值不断变化。public static void main(String[] args) { //only prior code is to access data char…

    Java:正则表达式模式匹配器是否有大小限制? - java

    我的模式类似于OR:“word1 | word2 | word3”我大约有800个字。可能有问题吗? 参考方案 您仅受记忆和理智的限制。 :)