public void captureNow(BufferedImage image) { try{ image = ImageIO.read(new File(getRecordeDir() + files[index++])); // only changes the local variable image. } catch (IOException ioe) { System.err.println(e.getMessage()); } } BufferedImage bi = new BufferedImage(width, height, type); captureNow(bi); // bi does not change.
After calling
captureNow(bi)
, bi
didn't get the image that supposed to be read. The problem here is I got confused with C++. Even though Java is pass by reference, it does not mean the same thing as in C++. Here in Java, the local variable image
got the address of bi
. In side the method, image
is assigned another address, but this does not affect bi
. In C++, a reference is automatically dereferenced to point to the actual object. Hence, an assignment will affect the actual object passed.Edit:
As a reader pointed out, here is a good explanation about Java's pass by value.
Java IS PASS-BY-VALUE... See http://javadude.com/articles/passbyvalue.htm
ReplyDeleteJava is always pass by value - even what looks like pass by reference is actually pass by value. This article is a good reference on the topic:
ReplyDeletehttp://www.programmerinterview.com/index.php/java-questions/does-java-pass-by-reference-or-by-value/
Thanks. I think that's what I'm trying to explain in the body but the title conveys the wrong idea. Thank you for pointing this out.
Delete