Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.java.programmer > #17359

Re: why does this work?

From Daniel Pitts <newsgroup.nospam@virtualinfinity.net>
Newsgroups comp.lang.java.programmer
Subject Re: why does this work?
References <aa374d3f-d1d4-43e0-be0a-972b80316255@googlegroups.com>
Message-ID <puxUr.3847$l63.2567@newsfe20.iad> (permalink)
Date 2012-08-08 10:38 -0700

Show all headers | View raw


On 8/8/12 10:30 AM, dkoleary wrote:
> Hi;
>
> New java programmer.  So new, in fact, that I'm still working my way through the O'Reilly Head First Java book.  One of the end of chapter questions involves identifying if a sample class will compile and what to do to make it compile if it won't.
>
> The sample class from chapter 4 is:
>
> class XCopy
> {  public static void main(String[] args)
>     {  int orig = 42;
>        XCopy x = new XCopy();
>        int y = x.go(orig);
>        System.out.println(orig + " " + y);
>     }
>
>     int go(int arg)
>     {  return arg * 2;   }
> }
>
> The book says that it'll compile and run, displaying "42 84" and, sure enough, it does:
>
> $ javac XCopy.java
> $ java XCopy
> 42 84
>
> How come that isn't recursive?  XCopy.main() instantiates a new XCopy.  Shouldn't that new XCopy instance also instantiate a new XCopy?
new XCopy() creates a new instance of the XCopy class, which executes 
Constructors.  main isn't executed again because of this.  main is only 
automatically executed by the JVM on start-up, once.
>
> I was figuring this would run until the XCopy.go function tried returning a number that wouldn't fit in int anymore... That's obviously not the case, but I don't know why.
int can fit any number in the range [-2^31, 2^31).  42 and 84 are both 
within that range.  It is possible that if you pass in a number with a 
large enough magnitude, you will end up with an overflow.  In Java (and 
many 2s-compliment integer systems), overflow will simply throw-away the 
upper bits, and you will have what is called "wrap-around".  This 
actually makes many of the basic operations easier, because signed 
numbers and unsigned numbers behave the same way.


Hopefully this helps.

Back to comp.lang.java.programmer | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

why does this work? dkoleary <dkoleary@olearycomputers.com> - 2012-08-08 10:30 -0700
  Re: why does this work? Daniel Pitts <newsgroup.nospam@virtualinfinity.net> - 2012-08-08 10:38 -0700
    Re: why does this work? dkoleary <dkoleary@olearycomputers.com> - 2012-08-08 11:39 -0700
      Re: why does this work? Lew <lewbloch@gmail.com> - 2012-08-08 17:33 -0700
  Re: why does this work? Eric Sosman <esosman@ieee-dot-org.invalid> - 2012-08-08 14:03 -0400
  Re: why does this work? Roedy Green <see_website@mindprod.com.invalid> - 2012-08-09 02:41 -0700
    Re: why does this work? glen herrmannsfeldt <gah@ugcs.caltech.edu> - 2012-08-09 20:17 +0000

csiph-web