Java vs C#

struct


Java
 
Java doesn't have struct.
You may design a final class 
or a simple class
to replace struct 

class Point
{
    public int x, y;
    public Point(int x, int y) {
        this.x = x;
        this.y = y;
    }
}
Point a = new Point(10, 10);
Point b = a;
a.x = 100;
System.out.println(b.x);
prints: 100
Since Point is a reference type,
b and a point to the same address,
when a's value changed, b's value changed too.

C#
 
A struct is a user-defined value type. 
It is declared in a very similar way to a class, 
except that it can't inherit from any class, 
nor can any class inherit from it.
struct is not a reference type.
struct Point
{
    public int x, y;
    public Point(int x, int y) {
        this.x = x;
        this.y = y;
    }
}
Point a = new Point(10, 10);
Point b = a;
a.x = 100;
System.Console.WriteLine(b.x);
prints: 10
Since struct Point is a value type, 
not a reference type, a's value changed
doesn't involve b's value.

structs are sealed, lightweighted and more efficient than classes.