Як перетворити Integer на int?


82

Я працюю над веб-додатком, в якому дані будуть передаватися між клієнтом та сервером.

Я вже знаю, що JavaScript int! = Java int. Тому що Java int не може бути нульовим, вірно. Зараз це проблема, з якою я стикаюся.

Я змінив свої змінні Java int на Integer.

public void aouEmployee(Employee employee) throws SQLException, ClassNotFoundException
{
   Integer tempID = employee.getId();
   String tname = employee.getName();
   Integer tage = employee.getAge();
   String tdept = employee.getDept();
   PreparedStatement pstmt;
   Class.forName("com.mysql.jdbc.Driver");
   String url ="jdbc:mysql://localhost:3306/general";
   java.sql.Connection con = DriverManager.getConnection(url,"root", "1234");
   System.out.println("URL: " + url);
   System.out.println("Connection: " + con);
   pstmt = (PreparedStatement) con.prepareStatement("REPLACE INTO PERSON SET ID=?, NAME=?, AGE=?, DEPT=?");
   pstmt.setInt(1, tempID);
   pstmt.setString(2, tname);
   pstmt.setInt(3, tage);
   pstmt.setString(4, tdept);
   pstmt.executeUpdate();
 }

Моя проблема тут:

pstmt.setInt(1, tempID);

pstmt.setInt(3, tage);

Я не можу використовувати змінні Integer тут. Я пробував з intgerObject.intValue(); Але це робить речі більш складними. Чи є у нас інші методи перетворення чи прийоми перетворення?

Будь-яке виправлення було б краще.


2
Я не розумію. Ви шукаєте щось простіше ніж pstmt.setInt(1, tempID.intValue())? Що простіше, ніж додати код на 11 символів?
EboMike

1
Спробуйте перейти на Java 5 або пізнішу версію: перетворення буде здійснено автоматично.
Микита Рибак

1
Гей, це працює. Дякую. Але тепер проблема прийшла сюди "Integer id = rs.getInt (1);".

1
@MaRaVan Чому це проблема? Це також повинно спрацювати чудово. Ви навіть спробували?
ColinD

Так, я використовував .intValue () у setTnt (), і це працює. Але, ціле число id = rs.getInt (1); показує червоне світло зараз.

Відповіді:


77

Як вже було написано в іншому місці:

  • Для Java 1.5 і пізніших версій вам не потрібно робити (майже) нічого, це робить компілятор.
  • Для Java 1.4 і раніше використовуйте Integer.intValue()для перетворення з Integer в int.

АЛЕ як ви писали, a Integerможе бути нульовим, тому доцільно перевірити це, перш ніж намагатись конвертувати int(або ризикувати отримати NullPointerException).

pstmt.setInt(1, (tempID != null ? tempID : 0));  // Java 1.5 or later

або

pstmt.setInt(1, (tempID != null ? tempID.intValue() : 0));  // any version, no autoboxing  

* використовуючи за замовчуванням нуль, також не міг нічого зробити, показати попередження або ...

Я переважно вважаю за краще не використовувати автобокс (другий рядок зразка), тому зрозуміло, що я хочу зробити.


1
У Java 1.4.2 немає посилання Integer.valueOf(int): docs.oracle.com/javase/1.4.2/docs/api/java/lang/…
Хардік Мішра,

13

Оскільки ви говорите, що використовуєте Java 5, ви можете використовувати setIntйого Integerзавдяки автоматичному боксу: це pstmt.setInt(1, tempID)має працювати чудово. У попередніх версіях Java вам довелося б зателефонувати .intValue()самому собі.

Протилежний працює добре ... Призначивши intАня Integerавтоматично змушує intбути autoboxed використання Integer.valueOf(int).


1
Як змінити це "Ціле число id = rs.getInt (1);" до цілого числа.

1
Я зробив людину. Це працювало для setInt (), і я ціную це. Тут id - Integer, а rs.getInt () повертає змінну int. Не працює.

1
Вибачте кодери, ви всі мали рацію. Шахта JRE 1.4. Мені дуже шкода, що я витратив ваш час.

9

Java автоматично перетворює Integer на int і назад (якщо ви все ще не використовуєте Java 1.4).


7
Що станеться, якщо Integerє null?
SparkAndShine

2
@sparkandshine - трохи пізно, але добре - nullповинен викликати aNullPointerException
user85421

6

Ще одним простим способом буде:

Integer i = new Integer("10");

if (i != null)
    int ip = Integer.parseInt(i.toString());

4

Можливо, у вас налаштування компілятора для вашої IDE встановлені в режим Java 1.4, навіть якщо ви використовуєте Java 5 JDK? В іншому випадку я погоджуюсь з іншими людьми, які вже згадували автобокс / розпакування.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.