Howdy.

Exams will come to you in labs. 

If you have not finished previous lab you can do it this week.

There are eight primitive types in Java

  int     byte short long

  double  float 

  boolean

  char

What is a type? A type is a set of values with some operations defined on it. 

You can come with identities

  boolean a, b; 
  a = ... ;
  b = ... ;
  System.out.println( ! (a && b) == (!a || !b) ); // prints true always 

Java is an object oriented language. 

The primitive types are aliens in that world. 

In Java we have the eight primitive types and reference types. 

Reference types are also known as classes or user-defined types. 

Let's see the difference between these two categories of types. 

Welcome to DrJava.  Working directory is C:\Users\dgerman\Desktop
> int a = 3
> int b = a
> a
3
> b
3
> a - b
0
> a == b
true


Welcome to DrJava.  Working directory is C:\Users\dgerman\Desktop
> Integer a
> Integer b 
> a = new Integer(3)
3
> a = 6
6
> String c = "whatever"
> c
"whatever"
> String d = new String("something")
> d
"something"


Welcome to DrJava.  Working directory is C:\Users\dgerman\Desktop
> Integer a = new Integer(3)
> Integer b = new Integer(3)
> a - b
0
> a == b
false
> a.equals(b)
true

  
Welcome to DrJava.  Working directory is C:\Users\dgerman\Desktop
> int a = 3
> int b = a
> a = a + 1
4
> a
4
> b
3


class Counter {
  int balance;
  void increment() {
    balance += 1;  
  }
  int getValue() {
    return balance;  
  }
}

Welcome to DrJava.  Working directory is C:\Users\dgerman\Desktop
> Counter a
> Counter b
> a = new Counter()
Counter@2d3c6a70
> a.getValue()
0
> a.increment()
> a.increment()
> a.increment()
> a
Counter@2d3c6a70
> a.getValue()
3
> b
null
> b = a
Counter@2d3c6a70
> a.getValue()
3
> b.getValue()
3
> a.increment()
> a
Counter@2d3c6a70
> a.getValue()
4
> b.getValue()
4


Welcome to DrJava.  Working directory is C:\Users\dgerman\Desktop
> int a = 3
> int b = a
> a = a + 1
4
> a
4
> b
3
> int c, d
> c = (d = 6)
6
> c
6
> d
6
> c += 1
7
> d
6
> Counter m, n
> m = (n = new Counter())
Counter@4e878c28
> m
Counter@4e878c28
> n
Counter@4e878c28
> n.getValue()
0
> m.getValue()
0
> n.increment()
> n.getValue()
1
> m.getValue()
1
> n
Counter@4e878c28
> m
Counter@4e878c28
> m.increment()
> m.getValue()
2
> n.getValue()
2
> n
Counter@4e878c28


Welcome to DrJava.  Working directory is C:\Users\dgerman\Desktop
> int[] a
> a = new int[] { 4, 2, -3, 6, 1 }
{ 4, 2, -3, 6, 1 }
> a
{ 4, 2, -3, 6, 1 }
> a[2]
-3
> a.length
5
> a[a.length-1]
1
> a[a.length-1] += 1
2
> a
{ 4, 2, -3, 6, 2 }
>

Welcome to DrJava.  Working directory is C:\Users\dgerman\Desktop
> int[] a = { 4, 3, 5 }
> a
{ 4, 3, 5 }
> a[1] = 4.5
Static Error: Bad types in assignment: from double to int
> Integer[] b = new Integer[6]
> b
{ null, null, null, null, null, null }
> int[] c = new int[6]
> c
{ 0, 0, 0, 0, 0, 0 }


Welcome to DrJava.  Working directory is C:\Users\dgerman\Desktop
> ArrayList<Integer> a
Static Error: Undefined class 'ArrayList'
> import java.util.ArrayList; // auto-import
ArrayList<Integer> a
> a 
null
> a = new ArrayList<Integer>()
[]
> a
[]
> a.add(new Integer(6))
true
> a
[6]
> a.add(3)
true
> a.add(-1)
true
> a.add(9)
true
> a
[6, 3, -1, 9]
> a.remove(1)
3
> a
[6, -1, 9]
> a.add(4, 1)
java.lang.IndexOutOfBoundsException: Index: 4, Size: 3
    at java.util.ArrayList.rangeCheckForAdd(Unknown Source)
    at java.util.ArrayList.add(Unknown Source)
> a
[6, -1, 9]
> a.add(2, 4)
> a
[6, -1, 4, 9]
> int[] b = new[4]
Invalid variable declaration
> int[] b = new int[4]
> b
{ 0, 0, 0, 0 }
> b[3] = 9
9
> b
{ 0, 0, 0, 9 }
> b[4] = 5
java.lang.ArrayIndexOutOfBoundsException


Welcome to DrJava.  Working directory is C:\Users\dgerman\Desktop
> ArrayList<Integer> a
Static Error: Undefined class 'ArrayList'
> import java.util.ArrayList; // auto-import
ArrayList<Integer> a
> a 
null
> a = new ArrayList<Integer>()
[]
> a
[]
> a.add(new Integer(6))
true
> a
[6]
> a.add(3)
true
> a.add(-1)
true
> a.add(9)
true
> a
[6, 3, -1, 9]
> a.remove(1)
3
> a
[6, -1, 9]
> a.add(4, 1)
java.lang.IndexOutOfBoundsException: Index: 4, Size: 3
    at java.util.ArrayList.rangeCheckForAdd(Unknown Source)
    at java.util.ArrayList.add(Unknown Source)
> a
[6, -1, 9]
> a.add(2, 4)
> a
[6, -1, 4, 9]
> int[] b = new[4]
Invalid variable declaration
> int[] b = new int[4]
> b
{ 0, 0, 0, 0 }
> b[3] = 9
9
> b
{ 0, 0, 0, 9 }
> b[4] = 5
java.lang.ArrayIndexOutOfBoundsException

Welcome to DrJava.  Working directory is C:\Users\dgerman\Desktop
> int[] a = new int[4]
> a
{ 0, 0, 0, 0 }
> a[0] = 5
5
> a[1] = 2
2
> a[2] = 9
9
> a[3] = -3
-3
> a
{ 5, 2, 9, -3 }
> a
{ 5, 2, 9, -3 }
> int[] b = java.util.Arrays.copyOf(a, 5)
> b
{ 5, 2, 9, -3, 0 }
> b[b.length-1] = 12
12
> b
{ 5, 2, 9, -3, 12 }
> a = b
{ 5, 2, 9, -3, 12 }
> a
{ 5, 2, 9, -3, 12 }


import java.util.Arrays;

class ArrayList {
  Integer[] values = new Integer[0];
  void add(Integer value) {
    values = Arrays.copyOf(values, values.length + 1);
    values[values.length-1] = value;
  }
  public String toString() {
    return Arrays.toString( values );  
  }
}

Welcome to DrJava.  Working directory is C:\Users\dgerman\Desktop
> ArrayList a = new ArrayList()
> a
[]
> a.add(5)
> a
[5]
> a.add(6)
> a
[5, 6]
> a.remove(2)
Static Error: No method in ArrayList has name 'remove'
>