Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java-It';是否可以在数组中添加int和字符串?_Java_Arrays - Fatal编程技术网

Java-It';是否可以在数组中添加int和字符串?

Java-It';是否可以在数组中添加int和字符串?,java,arrays,Java,Arrays,可以在数组中添加int和字符串吗?我是在同一个数组中说的。不,Java是一种强类型语言。因此,如果数组的类型为String或int,则不能将String和int添加到同一数组中 但是,如果数组的类型为对象,则可以将字符串和整数(整数文本将自动装箱)添加到同一数组中。这是不推荐的,并且可能是一个信号,表明您应该更多地考虑您的设计。你需要问自己的第一个问题是你为什么要这样做。如果您确实有一个有效的理由,那么最好从一个转换到另一个,而不是将数组键入为Object 有一个catch-call数组,您可以

可以在数组中添加int和字符串吗?我是在同一个数组中说的。

不,Java是一种强类型语言。因此,如果数组的类型为
String
int
,则不能将
String
int
添加到同一数组中

但是,如果数组的类型为
对象
,则可以将
字符串
整数
(整数文本将自动装箱)添加到同一数组中。这是不推荐的,并且可能是一个信号,表明您应该更多地考虑您的设计。你需要问自己的第一个问题是你为什么要这样做。如果您确实有一个有效的理由,那么最好从一个转换到另一个,而不是将数组键入为
Object

有一个catch-call数组,您可以在其中插入任何对象,原因有很多:

  • 您正在强制对象之间不分离。这些对象实际上是相互关联的吗?如果是这样,则使用接口或创建每个类型都扩展的抽象类进行键入
  • 由于对象之间没有分隔,因此从数组中拉出的任何对象都是
    对象
    。你怎么知道是什么?您需要显式地检查其类型。这是一种极其笨重且无法维护的设计
  • 实际上,您最终会失去类型安全性,并且无法从编译过程中出现的类型不匹配错误中获益。这将隐藏代码中可能出现的错误,您可能忘记检查类型,或者将对象强制转换为错误类型。这会导致各种恶梦般的虫子
  • 您的代码将充斥着显式检查和强制转换,并且将无法维护(由您或任何其他人)
  • 您的代码到处泄漏抽象。没有人可以查看数组并了解数组包含的内容。任何使用您的代码的人都需要记住大量关于数组可以包含哪些类型的对象的细节
  • 混淆从来不是一个有效的理由。代码应该清晰,易于阅读,易于维护,易于理解(对于您和任何其他将阅读您的代码的人)。任何看起来模糊不清或“聪明”的代码都需要重写或大量记录,以解释其“聪明”的原因。至于混淆源代码,这不是问题,因为您将分发
    .class
    文件。您可以通过反编译器运行它来查看源代码。在源代码级别,您无法令人满意地混淆代码;你只会让你或其他人难以维持。模糊处理可以在字节码级别完成,因此这并不适用于这种情况

是的,这是可能的,但这不是好的做法

Object[] myObjects = new Object[] {array1[i], array2[i], "name1", value1, value2, "name2",  value1, value....};

它必须是对象数组

在字符串数组中,您可以使用“123”,然后在以后需要时将其转换为int。

您不能将基元类型(包括int)添加到包含字符串等对象的数组中。但是,如果声明对象[]数组,则int到Integer的自动装箱将使这成为可能

Object[] array = new Object[2];
array[0] = "Hello";
array[1] = 42;

尽管如果将字符串和int建模为类的属性会起作用,我不建议这样做。

是的,这绝对是可能的,只要有一个原始对象数组就行了

例如:

Object[] arr = new Object[10];
arr[0] = 10; // boxed to Integer class
arr[1] = "foo"; // String class
if (arr[0] instanceof Integer) ((Integer) arr[0]) += 10;
然后可以使用
instanceof
确定存储在特定索引中的对象类型

例如:

Object[] arr = new Object[10];
arr[0] = 10; // boxed to Integer class
arr[1] = "foo"; // String class
if (arr[0] instanceof Integer) ((Integer) arr[0]) += 10;
请注意,这不一定是一个很好的习惯做法,但它确实有应用。

严格地说:不。
否则:在大多数实际情况下为是:

Object[] array = { 42, "foo" };
请注意,
42
不是
int
,而是一个“整数”。但是由于自动装箱和取消装箱,您不会注意到差异。当然,折衷是性能和垃圾收集器开销


此外,数组必须是
Object[]
类型,而不是
String[]
类型,也不是
int[]
类型。您可以使用
java.util.ArrayList
执行此操作。你需要确保在取出物品时仔细检查得到的物品。

mmm…你最终可以添加一个整数。.int不是一个对象。这是一个如此糟糕的设计,我甚至不知道为什么会有人想这样做。int是IntegerIt的“自动装箱”问题不是“这是一个好的实践…”,而是一个问题“这是可能的…”当然这不是一个好的做法为什么“不推荐”“。我可以看到潜在的用例,尤其是在混淆方面。我同意在大多数情况下这是不必要的。@jli让我们把混淆留给编译后的jar混淆器。当涉及到开发人员实际编写的代码时,让我们尽可能使其易于使用(或者至少是合理的)。@jli本来打算发表评论,但结果很长,所以看看我的编辑。当我说混淆时,我指的不仅是源代码级别,而且是字节码级别。将对象实例存储在阵列中会使反射对黑客来说更加烦人(如使用此技术的游戏RuneScape所示)@jli以使代码不可读和不可维护为代价进行模糊处理在我看来是不值得的。一个专门的破解者无论如何都会找到破解游戏的方法。
ArrayList
并不比普通数组好多少。在这种情况下,它与
对象
数组一样。没错,但我认为用户可能更容易尝试,正如我的问题所说,我猜他对java/Programming相当陌生,但结果是一样的,而且不容易使用。