如何将Integer转换为int?

96

我正在开发一个Web应用程序,其中数据将在客户端和服务器端之间传输。

我已经知道JavaScript的int类型与Java的int类型不同。因为Java的int类型不能为null,对吧。 现在我遇到了这个问题。

我把我的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);

我无法在这里使用整数变量。我尝试过使用 intgerObject.intValue();,但这使事情变得更加复杂。我们是否有其他转换方法或技术?

任何修复都会更好。


2
我不明白。你想要比“pstmt.setInt(1, tempID.intValue())”更简单的东西吗?有什么比添加11个字符的代码更容易的呢? - EboMike
1
尝试切换到Java 5或更高版本:转换将自动完成。 - Nikita Rybak
1
嘿,它可以了。谢谢。但现在问题来了,“Integer id = rs.getInt(1);”。 - user405398
1
@MaRaVan 这有什么问题吗?它应该也能正常工作。你试过了吗? - ColinD
对不起,程序员们,你们都是正确的。我的JRE版本是1.4。 我真的很抱歉浪费了你们的时间。 - user405398
显示剩余3条评论
5个回答

90

如其他地方已经写过:

  • 对于Java 1.5及更高版本,您几乎不需要做任何事情,编译器会自动完成。
  • 对于Java 1.4及更早的版本,请使用Integer.intValue()将Integer转换为int。

但正如你所写的那样,一个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) 方法。请参考:http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/Integer.html#valueOf(java.lang.String) - Hardik Mishra

14

你说你正在使用Java 5,因此你可以使用setInt方法和Integer类型的参数,由于自动拆箱功能的支持:pstmt.setInt(1, tempID)应该可以正常工作。在较早的Java版本中,你需要自己调用.intValue()方法。

反过来也是一样的...将一个int赋值给一个Integer类型的变量,将自动使用Integer.valueOf(int)方法将int装箱。


1
如何将 "Integer id = rs.getInt(1);" 更改为整数。 - user405398
1
我已经试过了。setInt()函数可以正常工作,我很感激。这里,id是一个整型变量,而rs.getInt()函数返回的是一个整型变量。但它无法正常工作。 - user405398
1
对不起,程序员们,你们都是正确的。我的JRE版本是1.4。 我真的很抱歉浪费了你们的时间。 - user405398

13

Java会自动将Integer类型转换为int类型,反之亦然(除非你使用的是Java 1.4版本以下)。


8
如果一个Integer对象为null,会发生什么? - SparkAndShine
2
@sparkandshine - 有点晚了,但是没关系 - null 应该会导致 NullPointerException - user85421

7
另一种简单的方法是:
Integer i = new Integer("10");

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

5
也许您的IDE编译器设置为Java 1.4模式,即使您使用的是Java 5 JDK?否则,我同意其他人已经提到的自动装箱/拆箱。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接