I learned C# in school and now I started to learn Java.
In Java there is "try with ressources" which will close/dispose stuff (like a Scanner) when it's not used anymore.
The equivalent C# is the using-Statement, which basically does the same.
Are they really exactly the same, or are there any differences (like what they are doing in background)?
No, they're not exactly the same.
try-with-resources
statements can declare multiple variables of different types; using
statements can declare multiple variables, but they all have to be of the same typeusing
statement doesn't have to declare any variables; using (foo)
is fine - whereas a try-with-resources statementusing
statement is still assignable, although it's still the initial value which is disposed, rather than the value at the end of the block; a variable declared in a try-with-resources
statement cannot be assigned within the blocktry-with-resources
statement can have catch
and finally
blocks, whereas you'd need to have a separate try
/catch
or try
/catch
/finally
block in C#using
statement throws an exception, and then the Dispose
method throws an exception, then only the latter exception is available; in try-with-resources
the exceptions from closing are "suppressed" (so the statement result is the exception from the try
block) but the closing exceptions can still be retrieved using Throwable.getSuppressed
.See more on this question at Stackoverflow