Block F

jshell

Python's interactive mode is called a REPL, which is short for read-evaluate-print loop.


>>> x =5  
>>> y = 3 
>>> x*y 
15

Java's REPL is called jshell. Here we invoke it in a command window.

Here we create in integer variable that stores the value 4.


jshell> int x = 4;
x ==> 4

Now watch this.


jshell> int p = 1;
p ==> 1

jshell> p *= 1048576;
$3 ==> 1048576

jshell> p
p ==> 1048576

jshell> p *= 1048576;
$5 ==> 0

Uh oh. Is this really true? (1048576)3 = 0?? You are seeing the effects of type overflow. Yeah, watch the videos.

Here is how to see the biggest integer in Java.


jshell> int big = Integer.MAX_VALUE;
big ==> 2147483647

Now add 1.


jshell> big + 1
$12 ==> -2147483648

The type int is a 32 big two's complement integer. The largest int is 231 = 1. Add 1 and doughnut around to the lowest int which is -231. Java's int type is a bit signed integer in two's complement notation.

Let's go out for a byte


jshell> byte b = 0;
b ==> 0

jshell> while(b >= 0){ b++;}

jshell> b
b ==> -128

The byte type is is an 8-bit integer.


jshell> short s = 0;
s ==> 0

jshell> while(s >= 0){s++;}

jshell> s
s ==> -32768

A short is a two-byte or 16-bit integer.


jshell> Short.MAX_VALUE
$18 ==> 32767

jshell> Short.MIN_VALUE
$19 ==> -32768

Where there's a short there's a long.


jshell> Long.MAX_VALUE
$20 ==> 9223372036854775807

jshell> Long.MIN_VALUE
$21 ==> -9223372036854775808

Look at the creative use of scrach variables to visit the scene of the doughnut.


jshell> $21
$21 ==> -9223372036854775808

jshell> $21 + 1
$23 ==> -9223372036854775807

jshell> $21 - 1
$24 ==> 9223372036854775807

Are thre strings? Yes.



jshell> String s = "hello";
s ==> "hello"

We will talk about them in more detail in lab class. There is a separate character type in Java, char



jshell> char bugs = 'z';
bugs ==> 'z'

jshell> bugs--;
$27 ==> 'z'

jshell> bugs
bugs ==> 'y'

There is fluidity between char and int.


jshell> bugs -= 32;
$29 ==> 'Y'

jshell> bugs
bugs ==> 'Y'

jshell> (int) bugs
$31 ==> 89

jshell> (char) 97
$32 ==> 'a'

jshell> (char) 945
$33 ==> 'α'

jshell> (char) 946
$34 ==> 'β'

jshell> (char) 947
$35 ==> 'γ'

jshell> (char) 948
$36 ==> 'δ'

jshell> (char) 10000
$37 ==> '✐'

jshell> (char) 5688
$38 ==> 'ᘸ'

jshell> (char) 3345
$39 ==> '഑'

jshell> (char) 25
$40 ==> '\031'

jshell> (char) 122
$41 ==> 'z'

Boola! Boola!



jshell> boolean foo = 4*4 == 16
foo ==> true

jshell> foo
foo ==> true

Uh oh.


jshell> not true
|  Error:
|  ';' expected
|  not true
|     ^
|  Error:
|  cannot find symbol
|    symbol:   variable not
|  not true
|  ^-^

Bang a boolean to negate it.


jshell> !foo
$44 ==> false

jshell> !true
$45 ==> false

jshell> !false
$46 ==> true

And??



jshell> true and true
|  Error:
|  ';' expected
|  true and true
|      ^
|  Error:
|  not a statement
|  true and true
|       ^-^
|  Error:
|  ';' expected
|  true and true
|          ^

Do this.


jshell> true && true
$47 ==> true

jshell> true && false
$48 ==> false

jshell> false && true
$49 ==> false

jshell> false && false
$50 ==> false

Prospectors, we've struck or!


jshell> true || true
$51 ==> true

jshell> true || false
$52 ==> true

jshell> false || true
$53 ==> true

jshell> false || false
$54 ==> false

Here is exclusive or.


jshell> true ^ true
$55 ==> false

jshell> true ^ false
$56 ==> true

jshell> false ^ true
$57 ==> true

jshell> false ^ false
$58 ==> false

Verboten, unlike Python.


jshell> true + true
|  Error:
|  bad operand types for binary operator '+'
|    first type:  boolean
|    second type: boolean
|  true + true
|  ^---------^

Java's double is just like Python's float.


jshell> double z = 5;
z ==> 5.0

jshell> z
z ==> 5.0

The float type is a 32 bit floating point number.



jshell> Float.MAX_VALUE
$61 ==> 3.4028235E38

jshell> Double.MAX_VALUE
$62 ==> 1.7976931348623157E308

Watch for this old chestnut.


jshell> .1 + .1 + .1 == .3
$63 ==> false

jshell> .1 + .1 + .1 
$64 ==> 0.30000000000000004

Here is our session's symbol table.


jshell> /vars
|    int x = 4
|    int p = 0
|    int $3 = 1048576
|    int $5 = 0
|    int biggie = -2147483648
|    int $8 = -2147483648
|    int $10 = -2147483648
|    byte b = -128
|    short $18 = 32767
|    short $19 = -32768
|    long $20 = 9223372036854775807
|    long $21 = -9223372036854775808
|    long $23 = -9223372036854775807
|    long $24 = 9223372036854775807
|    String s = "hello"
|    char bugs = 'Y'
|    char $27 = 'z'
|    char $29 = 'Y'
|    int $31 = 89
|    char $32 = 'a'
|    char $33 = 'α'
|    char $34 = 'β'
|    char $35 = 'γ'
|    char $36 = 'δ'
|    char $37 = '✐'
|    char $38 = 'ᘸ'
|    char $39 = '഑'
|    char $40 = '\031'
|    char $41 = 'z'
|    boolean foo = true
|    boolean $44 = false
|    boolean $45 = false
|    boolean $46 = true
|    boolean $47 = true
|    boolean $48 = false
|    boolean $49 = false
|    boolean $50 = false
|    boolean $51 = true
|    boolean $52 = true
|    boolean $53 = true
|    boolean $54 = false
|    boolean $55 = false
|    boolean $56 = true
|    boolean $57 = true
|    boolean $58 = false
|    double z = 5.0
|    float $61 = 3.4028235E38
|    double $62 = 1.7976931348623157E308
|    boolean $63 = false
|    double $64 = 0.30000000000000004