java - 如何在附加的 StudentTest.java 文件中交换对象 s1 和 s3
问题描述
下面是一个 StudentTest 类,它使用 Student.java 创建学生
学生班
class Student
{
int id;
static int computeCount;
int age;
String name;
String gender;
short rank;
double gpa;
long phone;
char degree;
boolean international;
double tutionfees=12000;
double internationalFees=5000;
Student(int id,String name,String gender,int age,long phone,double gpa, char degree){
// id=newId;
// name=newName;
// gender=newGender;
// age=newAge;
// phone=newPhone;
// gpa=newGpa;
// degree=newDegree;
this(id,name,gender, age, phone,gpa,degree,false); // delegate to second parameterized constructor
//international=isInternational;
}
// Second parameterized constructor
Student(int id,String name,String gender,int age,long phone,double gpa, char degree,boolean international){
this.id=id;
this.name=name;
this.gender=gender;
this.age=age;
this.phone=phone;
this.gpa=gpa;
this.degree=degree;
this.international=international;
}
学生测试班
class StudentTest {
public static void main(String args[])
{
Student s1=new Student(1000,"John","Male",18,2234567890L,3.8,'B');
Student s2=new Student(1001,"Indresh","Male",20,2234567893L,4.0,'C',true);
Student s3 = new Student(1002,"Anita","Female",25,2234568793L,4.2,'B',true);
System.out.println("student1: " + s1.name);
System.out.println("student2: " + s2.name);
System.out.println("student3: " + s3.name);
Student[] students={s1,s2,s3}; // object array of Student type
// Swap s1 and s3 references
// Before Swap
System.out.println("\n\nBefore Swap\n--------");
System.out.println("student1: " + s1.name);
System.out.println("student2: " + s2.name);
System.out.println("student3: " + s3.name);
// After swap
swap_s1_n_s3(students,0,2);
System.out.println("\n\nAfter Swap, Inside StudentTest class\n--------");
System.out.println("\n\nstudent1: " + s1.name);
System.out.println("student2: " + s2.name);
System.out.println("student3: " + s3.name);
}
static void swap_s1_n_s3(Student[] students,int first,int last)
{ System.out.println("\n\n------------\nINSIDE SWAP METHOD");
Student s5;
s5=students[first];
students[first]=students[last];
students[last]=s5;
System.out.println("\n\nstudent1: " + students[0].name);
System.out.println("student2: " + students[1].name);
System.out.println("student3: " + students[2].name);
System.out.println("\nEXIT SWAP METHOD");
}
}
输出
$ java学生测试
学生 1:琼 学生 2:Indresh 学生 3:安妮塔
交换前
学生 1:约翰 学生 2:Indresh 学生 3:安妮塔
内部交换方法
学生 1:安妮塔 学生 2:Indresh 学生 3:约翰
退出交换方法
交换后,在 StudentTest 类中
学生 1:约翰 学生 2:Indresh 学生 3:安妮塔
我的问题是交换函数也应该交换 main() 中的引用,但事实并非如此,为什么?
解决方案
交换逻辑正常工作。这个问题的性质不同。
s1
在呈现的代码中,变量s2
和s3
用于保存初始Student
对象,初始化 -arraystudents
并打印为调试。然而,不管对 和 with 做了什么students
,这三个变量都引用了Student
最初分配给它们的相同对象。当变量声明为final
.
打印Student
s 进行调试时,应通过students
-array 访问它们:
System.out.println("student1: " + students[0].name);
System.out.println("student2: " + students[1].name);
System.out.println("student3: " + students[2].name);
推荐阅读
- python - 我的程序不断发送垃圾邮件打印功能 Python
- node.js - 如何在 Node.js 中构建一个类来抽象 RabbitMQ 和 amqplib 功能
- java - 没有参数的 super() 关键字
- rust - 将 &i64 转换为 &[u8; 的惯用方法是什么?8]?
- makefile - Vala 的 Makefile
- laravel-5 - 如果 \Log::info 的输出取决于某些选项?
- javascript - 有没有办法让嵌套循环使用与循环相同的计数器?
- laravel - 如何在带警卫的流明中实现多重身份验证?
- iframe - 嵌入 iframe 的 Docusign 似乎不遵守跨站点脚本指令
- r - 具有小数据集的 R 树不会初始化树