Java 序列化数组中的循环

Java 序列化数组中的循环,java,for-loop,serialization,Java,For Loop,Serialization,示例1 Person person = (Person)os.readObject(); System.out.println(person); person = (Person)os.readObject(); System.out.println(person); person = (Person)os.readObject(); System.out.println(person);

示例1

         Person person = (Person)os.readObject();
         System.out.println(person);
         person = (Person)os.readObject();
         System.out.println(person);
         person = (Person)os.readObject();
         System.out.println(person);
示例2

for(int i=0;i<num;i++) {
            Person person = (Person)os.readObject();
            System.out.println(person);
        }

我得到重复变量的错误。我认为示例3与示例2中for循环所做的事情在字面上是一样的,有人介意解释一下吗?

您正在用相同的名称声明变量(非法)

试一试


可以在循环中声明变量。每次执行循环时,它都会读取变量的声明,一切正常。否则,您将无法在循环中声明变量。实际上,您只需声明一次。
但是在示例3中,您声明了三次相同的变量。

实际上,您的问题不是序列化数组,而是非常基本的java知识

在示例1中,您重用了该变量,因此它是正确的。在示例3中,您试图声明一个已经存在的变量,该变量会导致编译错误。您的问题在于您对示例2的理解。在2中,代码不会在编译时或其他时间重复。创建一个代码块,该代码块在循环中执行多次

如果在块中声明变量,则该变量仅存在于该块中。在for循环的一个循环结束时,块中声明的每个变量都将被“删除”/“丢弃”

您甚至可以对变量使用“final”。样本:

public static void main(String[] args) {

    final int[] samples = { 1, 3, 5, 7, 11 };
    for (int i = 0; i < samples.length; i++) { // Start of block
        // works because value is gone after this block
        final int value = samples[i];
        System.out.println(value);
    } // end of block

    // Won't work:
    System.out.println(value);
}
publicstaticvoidmain(字符串[]args){
最终int[]样本={1,3,5,7,11};
对于(int i=0;i
请参阅我在中的评论 有关花括号如何工作的另一个示例

 Person person = (Person)os.readObject();
 System.out.println(person);
 person = (Person)os.readObject();
 System.out.println(person);
 person = (Person)os.readObject();
 System.out.println(person);
public static void main(String[] args) {

    final int[] samples = { 1, 3, 5, 7, 11 };
    for (int i = 0; i < samples.length; i++) { // Start of block
        // works because value is gone after this block
        final int value = samples[i];
        System.out.println(value);
    } // end of block

    // Won't work:
    System.out.println(value);
}