byte max= 127; max++; System.err.println(max==128);
int sum=0; for (byte b = Byte.MIN_VALUE; b <= Byte.MAX_VALUE; b++) { sum += b; }
for (byte b = Byte.MIN_VALUE; b < Byte.MAX_VALUE; b++) { if (b == 0x90) System.out.print("Yessss, I have found it!"); }
- Tüm tam sayı tipleri (byte, short, int, long) işaretli tam sayıdır
- En yüksek anlamlı bit işaret bitini gösterir
- Negatif sayılar ikiye tümleyen aritmetiğine göre kodlanır. Buna göre bir sekizli olarak yorumlandığında 0x90 değeri iki tabanında 0b10010000 ve on tabanında - (0b01101111 + 0b00000001)=-112 değerine eşittir. Eğer yukarıdaki kodda gerçekten sekiz bitlik olarak tanımlamak istiyorsak karşılaştırma koşulunu ( b == (byte) 0x90 ) olarak değiştirmeliyiz. Okunurluğu arttırmak için ise sabiti aşağıdaki gibi tanımlamak uygun olur:
private static final MASTER_ID = (byte) 0x90 ;
- char tipi ise işaretsiz 16-bit tam sayı olarak ele alınır:
System.err.println((int)(char)(byte)(-1));
Tam sayılar (byte, short, int) ile yapılan aritmetik işlemler (+,-,*,/) sonucu her zaman int tipindedir. Bu nedenle derleyeci aşağıda kod için hata verecektir:
short x= 42, y= 108, z= 0; z = x + y;
short x= 42, y= 108, z= 0; z = (short) ( x + y ) ;
short x= 42, y= 108, z= 0; z += x + y;
int inf= 1/0; int one= 0/0;
Ancak kayan noktalı sayıları karşılaştırırken çok daha dikkatli olmak gerekir. Örneğin aşağıdaki kod parçasını inceleyelim:
double myMoney = 4.35; System.err.println("I have worked hard!"); myMoney *= 100; if (myMoney == 435.0){ System.err.println("I have $ 435.00 now!"); }
BigDecimal myMoney = new BigDecimal("4.35"); myMoney.setScale(6); System.err.println("I have worked hard!"); myMoney = myMoney.multiply(BigDecimal.valueOf(100.0)); if (myMoney.compareTo(BigDecimal.valueOf(435))==0){ System.err.println("I have 435 TL now..."); }
import java.math.BigDecimal; import static java.math.BigDecimal.*; public class Pi { private static final BigDecimal TWO = new BigDecimal(2); private static final BigDecimal FOUR = new BigDecimal(4); private static final int LENGTH = 100_000; public static void main(String[] args) { BigDecimal p = compute(LENGTH); for (int start = 0, stop = start + 1_000;
stop <= LENGTH;
start += 1_000, stop += 1_000) { System.err.println(p.toString().substring(start, stop)); } } // Gauss-Legendre Algorithm public static BigDecimal compute(final int SCALE) { BigDecimal a = ONE; BigDecimal b = ONE.divide(sqrt(TWO, SCALE), SCALE, ROUND_HALF_EVEN); BigDecimal t = new BigDecimal("0.25"); BigDecimal x = ONE; BigDecimal y; while (!a.equals(b)) { y = a; a = a.add(b).divide(TWO, SCALE, ROUND_HALF_UP); b = sqrt(b.multiply(y), SCALE); t = t.subtract(x.multiply(y.subtract(a).multiply(y.subtract(a)))); x = x.multiply(TWO); } return a.add(b).multiply(a.add(b)) .divide(t.multiply(FOUR), SCALE, ROUND_HALF_UP); } // square root method (Newton's method) public static BigDecimal sqrt(BigDecimal A, final int SCALE) { BigDecimal x0 = new BigDecimal("0"); BigDecimal x1 = new BigDecimal(Math.sqrt(A.doubleValue())); while (!x0.equals(x1)) { x0 = x1; x1 = A.divide(x0, SCALE, ROUND_HALF_UP); x1 = x1.add(x0); x1 = x1.divide(TWO, SCALE, ROUND_HALF_UP); } return x1; } }
float yourMoney = 1_000_000_000F; yourMoney = yourMoney + 50; NumberFormat nf = NumberFormat.getCurrencyInstance( new Locale("tr","TR")); System.err.println("Your money is " + nf.format(yourMoney));
Your money is 1.000.000.064,00 TL
public class VehicleTest { @Test public void addBox_overloaded() { Vehicle vehicle = new Vehicle(1_000, 1_500); assertFalse(vehicle.addBox(501)); assertEquals(1_000, vehicle.getWeight(), 0.001); } @Test public void addBox_ok() throws Exception { Vehicle vehicle = new Vehicle(1_000, 1_500); assertTrue(vehicle.addBox(100)); assertEquals(1_100, vehicle.getWeight(), 0.001); } }
double inf= 1./0; double negative_inf= -1./0; double nan= 0./0; System.err.println(inf); System.err.println(negative_inf); System.err.println(nan);
Infinity
-Infinity
NaN
Tam sayılarla çalışırken özel bir durum olmasa da bunların sarmal sınıfları ile çalışırken dikkatli olmamazı gerektiren bir durum var:
Integer lostIsland= 108; Integer helixIsland= 108; System.err.println(lostIsland==helixIsland); Integer perfectNumber= 496; Integer nothingSpecial= 496; System.err.println(perfectNumber==nothingSpecial);
public static Integer valueOf(int i) { assert IntegerCache.high >= 127; if (i >= IntegerCache.low && i <= IntegerCache.high) return IntegerCache.cache[i + (-IntegerCache.low)]; return new Integer(i); }
Integer lostIsland= 108; Integer helixIsland= 108; System.err.println(lostIsland.equals(helixIsland)); Integer perfectNumber= 496; Integer nothingSpecial= 496; System.err.println(perfectNumber.equals(nothingSpecial));
true true
String jack1 = "Jack"; String jack2 = new String("Jack");
String jack1 = "Jack"; String jack2 = new String("Jack"); String jack3 = "Jack"; System.out.println(jack1==jack2); System.out.println(jack1==jack3); System.out.println(jack1.equals(jack2)); System.out.println(jack1.equals(jack3));
false true true true
String jack1 = "Jack"; String jack2 = new String("Jack"); jack2= jack2.intern(); System.out.println(jack1==jack2);
String sınıfı değiştirilemez bir sınıftır. Metodlarının hepsi yeni bir String nesnesi döndürür, mevcut String nesnesinin karakterleri üzerinde bir değişikliğe neden olmazlar:
String name= "Jack";
name.toUpperCase(); if (name.equals("JACK")){ System.err.println("Jack the Ripper"); } else { System.err.println("Jack Bauer"); }
String name="ışiğöçü"; System.err.println(name); System.err.println(name.toUpperCase(Locale.US)); System.err.println(name.toUpperCase(new Locale("tr","TR")));
ışiğöçü IŞIĞÖÇÜ IŞİĞÖÇÜ
String basicRules= "< a < b < c < ç < d < e < f < g < ğ < h "+ "< ı < i < j < k < l < m < n < o < ö < p "+ "< r < s < ş < t < u < ü < v < y < z "; String trExpension= "& şi ; she & ş ; sch & s ; ş & u ; ü & i ; ı " +
"& c ; ç & o ; ö & ğ ; g" ; final Collator collator= new RuleBasedCollator(basicRules + trExpension); Collator.getInstance(new Locale("tr","TR")); collator.setStrength(Collator.PRIMARY); String name1="şima"; String name2="sima"; System.err.println("name1="+name1); System.err.println("name2="+name2); System.err.println("name1.equals(name2): "+collator.equals(name1, name2)); name1="şule"; name2="schule"; System.err.println("name1="+name1); System.err.println("name2="+name2); System.err.println("name1.equals(name2): "+collator.equals(name1, name2)); name1="ışçöüğ"; name2="iscoug"; System.err.println("name1="+name1); System.err.println("name2="+name2); System.err.println("name1.equals(name2): "+collator.equals(name1, name2));
name1=şima name2=shema name1.equals(name2): true name1=şule name2=schule name1.equals(name2): true name1=ışçöüğ name2=iscoug name1.equals(name2): true
< a < b < c < ç < d < e < f < g < ğ < h < ı < i < j < k < l < m < n < o < ö < p < r < s < ş < t < u < ü < v < y < z
List<String> names= new ArrayList<>(); names.add("şule"); names.add("sema"); names.add("şima"); names.add("zehra"); names.add("ayşegül"); Collections.sort(names); System.out.println(names); Comparator<String> stringComparator= new Comparator<String>() { @Override public int compare(String o1, String o2) { return collator.compare(o1, o2); } }; Collections.sort(names,stringComparator); System.out.println(names);
[ayşegül, sema, zehra, şima, şule] [ayşegül, sema, şima, şule, zehra]
Binnur hocam çok güzel bir belge olmuş, eline sağlık. Teşekkürler
ReplyDelete