import java.math.BigInteger;
import java.util.Random;

public class JavaObjects {

	public static void main(String[] args) {
		//wrapper classes
		Integer x1 = new Integer(7);
		
		//auto-boxing - convert int to Integer
		Integer x2 = 7;
		//auto-unboxing - convert Integer to int
		int y = x2 + 3;
		
		System.out.println(x2);
		System.out.println(y);
		
		Random rng = new Random(57);
		for(int i = 0; i < 10; i++) {
			int r1 = (int)(Math.random()*10);
			int r2 = rng.nextInt(10);
			System.out.printf("r1=%d r2=%d\n", r1, r2);
		}
		
		
		//change s's reference
		String s = "Hello";
		s = "Hi there";
		s = s.toUpperCase();
		//String, Integer, etc are immutable
		
		//mutable versions od String: StringBuffer and StringBuilder
		StringBuilder t = new StringBuilder("Hello");// doesn't work: "Hello";
		t.setCharAt(0, 'h');
		t.append(" How are you?");
		
		//use the toString method
		System.out.println(t);
		
		//BigDecimal BigInteger
		BigInteger i = new BigInteger("1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000");
		BigInteger j = new BigInteger("99999999999999999999999999999999999999999999999999999999");
		BigInteger k = i.multiply(j); //i * j;
		System.out.println(k);
		
	}

}
