-1

尽管变量 rowNum 是 int 而不是 String,但下面的代码怎么可能正常工作?这怎么可能或这里发生了什么?

将字符串分配给字符串选择变量时,int rowNum 变量是否会自动转换为字符串?

  public String getTableString(int rowNum){
  String tableString = "";
  String[] columns = new String[]{TABLE_STRING};
  String selection = _ID + " = '" + rowNum + "';";
  Cursor cursor = sqLiteDatabase.query
  (MYDATABASE_TABLE, columns, selection, null, null, null, null);

为什么在这种情况下我不必使用 Integer.toString() 并且它仍然有效?

这没有任何意义,按照正常规则,应该要求使用 Integer.toString() 方法将 rowNum 转换为 String,然后再将其分配给 String 选择变量。

基本上如代码所示,您将 int 粘贴到字符串上并将其分配给 String 变量。这是错误的。那应该是一个类转换异常。

4

4 回答 4

2

这是在Java 语言规范中找到的内容之一- 具体来说,第 15.18.1 节:

如果只有一个操作数表达式是字符串类型,则对另一个操作数执行字符串转换(第 5.1.11 节)以在运行时生成字符串。

最终,根据§5.1.11int发生的事情是通过将原始值转换为其对应的 Object (so => new Integer()charbecome等)的字符串转换new Character(),然后toString()在该引用上调用。

长话短说,是的;Integer.toString()正在被调用;但是您没有义务调用它 - 这是作为字符串转换的要求完成的。

咬一口:

  • 我不知道_ID's 的类型,但我会假设它是 String。
  • " = '"是一个字符串文字。将此与之前的左侧值结合起来,您就有了一个新的字符串。

  • rowNum是一个int。创建一个新的Integer并调用toString()它,然后连接结果。你有一个新的字符串。

  • "';'"是一个字符串。将它与之前新的字符串结合起来,你就有了一个新的字符串。
于 2013-07-05T06:18:36.133 回答
1

它的一种Auto Boxing,这里发生的是

String.valueOf(rowNum)

您应该手动为 to 执行castingint操作String。但是为了方便程序员,java编译器会智能地做到这一点。

于 2013-07-05T06:30:25.377 回答
0

最后,rowNumb是一个整数,但是当你把它放在双引号旁边时,它将被视为字符串文字的一部分。

例如:

int a = 3;
jtextField.setText(Integer.toString(a));
//or
jtextField.setText(""+a);
//are the not the same, but the second one is a tricky way to set
//an integer to the text field.
于 2013-07-05T06:19:11.560 回答
0

如果您将字符串与 int 连接,Java 会尝试将其转换为字符串。本质上,.toString 是在 Object 上调用的,在本例中是一个 Integer。

你应该提高你的技能。这是您应该知道的基本知识...

于 2013-07-05T06:20:35.477 回答