As you might knowJava does not support pointers, thus swapping things around could create problems. In this post I will show an example of swapping two objects.
We have Employee class that holds information about Employees and SwapDemo3 class that will actually swap two employees inside a swap() method.
Swap() method will be using set and get methods of Employee class to get the private data from it.
So here is Employee Class we will be working with:
// an example on Java objects // constructor // instance variables, static variable // methods: getters and setters // keywords: this, new public class Employee { public static int numberOfEmployees; private int employeeID; private String employeeName; private String address; private String startingYear; public Employee( int id, String name, String addr, String year) { employeeID = id; employeeName = name; setAddress( addr ); startingYear = year; numberOfEmployees++; } public Employee() { this(10000, null, null, null); }; //Set methods public void setAddress( String address ) { this.address = address; } public void setEmployeeID(int employeeID) {this.employeeID = employeeID;} public void setEmployeeName(String employeeName) {this.employeeName = employeeName;} public void setStartingYear(String startingYear) {this.startingYear = startingYear;} //Get methods public String getAddress() { return address; } public int getEmployeeID() {return employeeID;} public String getEmployeeName() {return employeeName;} public String getStartingYear() {return startingYear;} public String toString() { String s; s = "*****************************************n" + " Employee Information *n" + "*****************************************n" + "ID: " + employeeID + "n" + "Name: " + employeeName + "n" + "Address: " + address + "n" + "Starting Year: " + startingYear + "nn"; return s; } public static void main( String args[] ) { Employee phil, george; phil = new Employee(); System.out.println( phil ); System.out.println( "t number of employees: " + Employee.numberOfEmployees +"n" ); // Part 2 phil = new Employee( 10023, "Phil Coulthard", "70 The Pond, Seneca@York", "2002"); george = new Employee( 10089, "George Farr", "678, IBM Toronto Lab", "1980" ); System.out.println( phil ); System.out.println( george ); System.out.println( "t number of employees: " + Employee.numberOfEmployees ); // a special case about the default constructor: // The Java compiler creates the default constructor if // does not have *any* constructors } }
and here is SwapDemo3 class that swaps 2 employees using get and set methods of the Employee class.
// A demo on pass-by-value in Java public class SwapDemo3 { public void swap( Employee a, Employee b ) { int employeeId; String employeeName; String address; String startingYear; employeeId = a.getEmployeeID(); a.setEmployeeID(b.getEmployeeID()); b.setEmployeeID(employeeId); employeeName = a.getEmployeeName(); a.setEmployeeName(b.getEmployeeName()); b.setEmployeeName(employeeName); address = a.getAddress(); a.setAddress(b.getAddress()); b.setAddress(address); startingYear = a.getStartingYear(); a.setStartingYear(b.getStartingYear()); b.setStartingYear(startingYear); } public static void main(String[] args) { SwapDemo3 sd = new SwapDemo3(); Employee one = new Employee( 12345, "John Doe", "70 The Pond", "1999" ), two = new Employee( 98765, "Mary Green", "45 King Street", "2007"); System.out.println( one.toString() + two.toString() ); System.out.println( "...swap swap swap" ); sd.swap( one, two ); System.out.println( "...back in main" ); System.out.println( one ); System.out.println( two ); } }
Program output is:
firstuser@firstuser:~/Desktop/JAC444/Week1$ java SwapDemo3 ***************************************** * Employee Information * ***************************************** ID: 12345 Name: John Doe Address: 70 The Pond Starting Year: 1999 ***************************************** * Employee Information * ***************************************** ID: 98765 Name: Mary Green Address: 45 King Street Starting Year: 2007 ...swap swap swap ...back in main ***************************************** * Employee Information * ***************************************** ID: 98765 Name: Mary Green Address: 45 King Street Starting Year: 2007 ***************************************** * Employee Information * ***************************************** ID: 12345 Name: John Doe Address: 70 The Pond Starting Year: 1999
Check out more posts on “Useful Java Functions and Tutorials”
Thanks for installing the Bottom of every post plugin by Corey Salzano. Contact me if you need custom WordPress plugins or website design.
Thanks for the info, been trying to figure that out for a while now:)
Glad you liked it 🙂
Good info. Like it. I am also trying if there is a way without using those getters and setters, we can swap the complete objects using Pass by reference…… 🙂
Thanks! It’s useful
What if the number of attributes for a class is huge. Like, Employee class has attributes- employeeID;
employeeName;
address;
startingYear, managername, salary, joindate,…..and many more such attributes. so swapping each variable will be tough. I think it can be done using cloning in java. or singleton classes . can u pls show how it can be done
What about swapping two elements from ArrayList or List? How to do it? Looks tedious compared to C/CPP!
Hi there, You have done an excellent job. I will certainly digg it and personally suggest to my friends. I’m sure they will be benefited from this website.
you are not swaping the objects but you are manipulating the objects
This is fragile. Adding an instance variable to Employee breaks the “swap” utility without warning. Afterwards, the code will run but will never copy the new member. Even Employee temp = a; a = b; b = temp; does essentially the same thing and works even if the classes change.
This post should be renamed “How to Copy Member Variables Between Instances” or similar.