Java int to String-Integer.toString (i) vs new Integer (i).toString()

Czasami java mnie zastanawia.
Mam ogromną ilość int do wykonania.

Jaka jest prawdziwa różnica?

  1. Integer.toString(i)
  2. new Integer(i).toString()
Author: Lonely Neuron, 2010-10-14

11 answers

Integer.toString wywołuje metodę statyczną w klasie Integer. Nie wymaga instancji Integer.

Jeśli zadzwonisz new Integer(i) tworzysz instancję typu Integer, która jest pełnym obiektem Java hermetyzującym wartość Twojego int. Następnie wywołujesz na nim metodę toString, aby poprosić ją o zwrócenie reprezentacji łańcuchowej samej .

Jeśli chcesz tylko wydrukować int, użyj pierwszego, ponieważ jest lżejszy, szybszy i nie używa dodatkowych pamięć (oprócz zwracanego ciągu).

Jeśli chcesz, aby obiekt reprezentował wartość całkowitą-aby umieścić go w kolekcji na przykład-użyjesz drugiej, ponieważ daje Ci pełnowartościowy obiekt do robienia wszystkich rzeczy, których nie możesz zrobić z gołym int.

 528
Author: Jean,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-06 14:41:32

new Integer(i).toString() najpierw tworzy (nadmiarowy) obiekt wrapper wokół i (który sam może być obiektem wrapper Integer).

Integer.toString(i) jest preferowany, ponieważ nie tworzy żadnych niepotrzebnych obiektów.

 94
Author: oksayt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-18 14:08:17

Inną opcją jest statyczny String.valueOf metoda.

String.valueOf(i)

To wydaje się nieco bardziej właściwe niż Integer.toString(i) dla mnie. Gdy typ i zmieni się, na przykład z int na double, Kod pozostanie poprawny.

 38
Author: fhucho,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-07 03:31:56
  1. new Integer(i).toString();

    To polecenie tworzy obiekt Integer, a następnie wywołuje jego metody toString(i) do zwraca reprezentację łańcuchową wartości Integer .

  2. Integer.toString(i);

    To zwraca obiekt String reprezentujący konkretną int (integer) , ale tutaj toString(int) jest metodą static.

Summary w pierwszym przypadku zwraca reprezentację łańcuchową obiektów, gdzie podobnie jak w drugim przypadku zwraca reprezentację łańcuchową liczby całkowitej.

 14
Author: Dhiraj,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-05 12:08:35

Polecam również użycie

int integer = 42;
String string = integer + "";
Proste i skuteczne.
 14
Author: Jasper Holton,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-05 12:09:40

Chociaż podoba mi się rekomendacja fhucho

String.valueOf(i)

Ironia polega na tym, że ta metoda faktycznie wywołuje

Integer.toString(i)

Dlatego użyj String.valueOf(i), Jeśli podoba Ci się jego odczyt i nie potrzebujesz radix, ale także wiedząc, że jest mniej wydajny niż Integer.toString(i).

 11
Author: Nathan Waite,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-05 12:11:05

Jeśli chodzi o pomiar wydajności, jeśli rozważasz wydajność czasu, to Liczba całkowita.toString (i); jest drogi, jeśli dzwonisz mniej niż 100 milionów razy. Else jeśli jest więcej niż 100 milionów wywołań, to new Integer(10).toString () będzie działać lepiej.

Poniżej znajduje się kod przez u można spróbować zmierzyć wydajność,

public static void main(String args[]) {
            int MAX_ITERATION = 10000000;
        long starttime = System.currentTimeMillis();
        for (int i = 0; i < MAX_ITERATION; ++i) {
            String s = Integer.toString(10);
        }
        long endtime = System.currentTimeMillis();
        System.out.println("diff1: " + (endtime-starttime));

        starttime = System.currentTimeMillis();
        for (int i = 0; i < MAX_ITERATION; ++i) {
            String s1 = new Integer(10).toString();
        }
        endtime = System.currentTimeMillis();
        System.out.println("diff2: " + (endtime-starttime));
    }

W kategoriach pamięci,

Nowa liczba całkowita(i).toString ();

Zajmie więcej pamięć, ponieważ za każdym razem tworzy obiekt, więc nastąpi fragmentacja pamięci.

 4
Author: Dhiraj,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-10-14 11:16:54

Lepiej:

Integer.valueOf(i).toString()
 2
Author: ryu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-25 11:59:12

Prosty sposób jest po prostu konkatenatem "" z liczbą całkowitą:

int i = 100;

String s = "" + i;

Teraz s będzie miało 100 jako wartość łańcuchową.

 2
Author: ShivBuyya,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-06 14:38:38

Tutaj Integer.toString wywołuje metodę statyczną w klasie Integer. Nie wymaga od obiektu wywołania.

Jeśli wywołujesz new Integer(i) Najpierw tworzysz instancję typu Integer, która jest pełnym obiektem Java, zawierającym wartość Twojego int i. następnie wywołujesz na niej metodę toString, aby poprosić ją o zwrócenie samej reprezentacji ciągu znaków.

 1
Author: Shailej Shimpi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-14 11:25:48

1.Integer.toString(i)

Integer i = new Integer(8);
    // returns a string representation of the specified integer with radix 8
 String retval = i.toString(516, 8);
System.out.println("Value = " + retval);

2.new Integer(i).toString()

 int i = 506;

String str = new Integer(i).toString();
System.out.println(str + " : " + new Integer(i).toString().getClass());////506 : class java.lang.String
 0
Author: Shivanandam Sirmarigari,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-20 05:15:36