public class Vertex1D {
private int x;
public Vertex1D(int x) {
this.x = x;
}
public int getX() {
return x;
}
}
...
Vertex1D v = new Vertex1D(1);
// x of value 1 cannot be changed anymore
public class Vertex1D {
private int x;
public Vertex1D(int x) {
this.x = x;
}
public int getX() {
return x;
}
}
...
Vertex1D v = new Vertex1D(1);
// x of value 1 cannot be changed anymore
Neměnný objekt vs. konstanta
Neměnný objekt vs. final
final prakticky zakáže změnu odkazufinalfinal Person p = new Person("Marek");
// p = new Person("Jan"); // cannot be done
p.setName("Haha I changed it"); // this works!
String.String s = "Hello " + "World";
"Hello ", "World" a "Hello World".String použít StringBuilder, který je modifikovatelný (mutable), viz dále
Podívejme se na rozdíl "Hello" a new String("Hello").
new String("Hello")vytvoří pokaždé nový objekt
"Hello"funguje na principu: jestli taký objekt zatím neexistuje, tak ho vytvořím, jinak vrátím odkaz na již existující objekt (uložen v paměti String constant pool)
String s1 = "Hello";
String s2 = "Hello";
boolean bTrue = (s1 == s2); // true, identical objects
s1 = new String("Hello");
s2 = new String("Hello");
boolean bFalse = (s1 == s2); // false, different objects though with same value
Stringchar charAt(int index) — vráti prvek na daném indexustatic String format(String format, Object… args) — stejné jako printf v Cboolean isEmpty() — vráti true jestli je prázdnýint length() — velikost řetězcematches, split, indexOf, startsWith …| Více metod najdete v dokumentaci třídy String. |
StringBuilderStringBuilder builder = new StringBuilder("Hello ");
builder.append("cruel ").append("world"); // method chain
builder.append("!");
String result = builder.toString();
StringBuilder se průběžně modifikuje, přidáváme do něj další znakyStringBuilder není thread safe, proto existuje její varianta StringBuffer.int, char, double, …Integer, Character, Double, …
Při vytváření takových objektů není nutné používat new,
Integer five = 5;int alsoFive = five;Integer objectInt = new Integer(42);
Integer objectInt2 = 42;
Wrappers (např. Double) mají různé konstanty:
MIN_VALUE je minimální hodnota jakou může double obsahovatPOSITIVE_INFINITY reprezentuje konstantu kladné nekonečnoNaN je zkratkou Not-a-Number — dostaneme ji např. dělením nulydouble d = Double.MIN_VALUE;
d = Double.NEGATIVE_INFINITY;
Double existuje static double parseDouble(String s) — udělá ze String číslo, z "1.0", vytvoří číslo 1.0Integer a další číselné typyint intValue() převod double do typu intboolean isNaN() — test, jestli není hodnotou číslo| Více konstant a metod popisuje javadoc. |
Integer) mají od primitivních (int) jednu hodnotu navíc — uhádněte jakou!nullInteger je objektový typ, proměnná je odkaz na objektProč tedy vůbec používat primitivní typy, když máme typy objektové?
int i = 1iInteger i = 11i je pouze odkaz, je to (nepatrně) pomalejšíInteger namísto int může mít dopad na výkon
a zcela jistě zabere dost paměti, asi zbytečněint primitiveInt = 42;
Integer objectInt = primitiveInt;
primitiveInt = new Integer(43);
Integer i1 = 100; // between -127 and 128
Integer i2 = 100;
boolean referencesAreEqual = (i1 == i2); // true
i1 = 300;
i2 = 300;
boolean referencesNotEqual = (i1 == i2); // false
== obvykle neporovnáváme (budeme se učit o equals)./