Jak przekonwertować Integer na int?

82

Pracuję nad aplikacją internetową, w której dane będą przesyłane między klientem a serwerem.

Już wiem, że JavaScript int! = Java int. Ponieważ Java int nie może być zerowa, prawda. To jest problem, przed którym stoję.

Zmieniłem zmienne int Java na 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();
 }

Mój problem jest tutaj:

pstmt.setInt(1, tempID);

pstmt.setInt(3, tage);

Nie mogę tutaj użyć zmiennych całkowitych. Próbowałem z intgerObject.intValue(); Ale to komplikuje sprawę. Czy mamy inne metody lub techniki konwersji?

Każda poprawka byłaby lepsza.

ROMANIA_engineer
źródło
2
Nie rozumiem. Szukasz czegoś prostszego niż pstmt.setInt(1, tempID.intValue())? Co jest łatwiejsze niż dodanie 11 znaków kodu?
EboMike
1
Spróbuj przełączyć się na Javę 5 lub nowszą: konwersja zostanie wykonana automatycznie.
Nikita Rybak
1
Hej, to działa. Dzięki. Ale teraz pojawił się problem "Integer id = rs.getInt (1);".
1
@MaRaVan Dlaczego jest to problem? Powinien również działać dobrze. Czy nawet tego próbowałeś?
ColinD
Tak, użyłem .intValue () w setTnt () i działa. Ale Integer id = rs.getInt (1); pokazuje teraz czerwone światło.

Odpowiedzi:

77

Jak już napisano w innym miejscu:

  • W przypadku Javy 1.5 i nowszych nie trzeba (prawie) nic robić, robi to kompilator.
  • W przypadku języka Java 1.4 i wcześniejszych użyj Integer.intValue()do konwersji z liczby całkowitej na int.

ALE jak napisałeś, an Integermoże być zerowe, więc dobrze jest to sprawdzić przed próbą konwersji na int(lub ryzykować uzyskanie a NullPointerException).

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

lub

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

* używając domyślnej wartości zero, może również nic nie zrobić, wyświetlić ostrzeżenie lub ...

Przede wszystkim wolę nie używać autoboxingu (druga linia próbkowania), więc jest jasne, co chcę zrobić.

user85421
źródło
1
Java 1.4.2 nie ma Integer.valueOf(int)Refer: docs.oracle.com/javase/1.4.2/docs/api/java/lang/…
Mishra
13

Ponieważ mówisz, że używasz Java 5, możesz używać setIntz Integerpowodu autounboxingu: pstmt.setInt(1, tempID)powinno działać dobrze. We wcześniejszych wersjach Java musiałbyś dzwonić do .intValue()siebie.

Działa to również odwrotnie ... przypisanie an intdo an Integerspowoduje automatyczne automatyczne intprzypisanie adresu za pomocą Integer.valueOf(int).

ColinD
źródło
1
Jak zmienić to "Integer id = rs.getInt (1);" do liczby całkowitej.
1
Zrobiłem stary. To zadziałało dla setInt () i doceniam to. Tutaj id to Integer, a rs.getInt () zwraca zmienną typu int. To nie działa.
1
Przepraszam, programistów, wszyscy mieliście rację. Mój JRE 1.4. Naprawdę przepraszam za marnowanie czasu.
9

Java automatycznie konwertuje liczbę całkowitą na int iz powrotem (chyba, że ​​nadal korzystasz z Java 1.4).

spbfox
źródło
7
Co się stanie, jeśli tak Integerjest null?
SparkAndShine
2
@sparkandshine - trochę późno, ale dobrze - nullpowinno spowodowaćNullPointerException
user85421
6

Innym prostym sposobem byłoby:

Integer i = new Integer("10");

if (i != null)
    int ip = Integer.parseInt(i.toString());
Parth mehta
źródło
4

Być może masz ustawienia kompilatora dla swojego IDE ustawione na tryb Java 1.4, nawet jeśli używasz Java 5 JDK? W przeciwnym razie zgadzam się z innymi osobami, które wspomniały już o autoboxingu / unboxingu.

Jim Tough
źródło