Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Java StringBuffer

[es] :: Java :: Java StringBuffer

[ Pregleda: 1923 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

darthskywalker
Luka Skajvoker

Član broj: 286923
Poruke: 25
*.PPPoE-4933.sa.bih.net.ba.



+1 Profil

icon Java StringBuffer04.11.2011. u 13:06 - pre 151 meseci
Pozdrav,
poceo sam nedavno da ucim Javu, pa me interesuje razlika izmedju String-a i StringBuffer-a. Da li mi neko moze objasniti koja je razlika i kada koristiti jedan a kada drugi objekat? Hvala
 
Odgovor na temu

biske86
Ivan Biševac
Zubin Potok

Član broj: 62435
Poruke: 979
*.dynamic.isp.telekom.rs.

Sajt: biske.rs


+39 Profil

icon Re: Java StringBuffer04.11.2011. u 13:40 - pre 151 meseci
String se sastoji od niza karaktera. Kod stringa ne možeš da menjaš neki od karaktera zato što ne on nepromenjivi objekat. Na primer ako imaš:
Code (java):
String ime = "skyvalker";

ovaj string ne možeš promeniti u skywalker.

Da bi to mogao da uradiš koristiš StringBuilder koji služi za manipulaciju nizom karaktera tj. stringom:
Code (java):
public class Test {
     public static void main(String[] args) {
          StringBuffer ime = new StringBuffer("Skyvalker");
          System.out.println(ime);
          ime.setCharAt(3, 'w');
          System.out.println(ime);
     }
}

Prethodni kod daje sledeći izlaz:
Skyvalker
Skywalker

 
Odgovor na temu

darthskywalker
Luka Skajvoker

Član broj: 286923
Poruke: 25
*.PPPoE-4933.sa.bih.net.ba.



+1 Profil

icon Re: Java StringBuffer04.11.2011. u 13:53 - pre 151 meseci
Aha, razumijem, hvala. A za sta sluzi "capacity" jer vidim da je povezan sa StringBuffer-om. Kad trazim length npr. nekog StringBuffer koji ima 10 znakova, njegov capacity iznosi 20. Sta predstavlja to?
 
Odgovor na temu

biske86
Ivan Biševac
Zubin Potok

Član broj: 62435
Poruke: 979
*.dynamic.isp.telekom.rs.

Sajt: biske.rs


+39 Profil

icon Re: Java StringBuffer04.11.2011. u 14:01 - pre 151 meseci
Citat:
Every string buffer has a capacity. As long as the length of the character sequence contained in the string buffer does not exceed the capacity, it is not necessary to allocate a new internal buffer array. If the internal buffer overflows, it is automatically made larger.


Preuzeto sa:
http://download.oracle.com/jav...pi/java/lang/StringBuffer.html

Početnik si i teško ide na početku ali navikavaj se da koristiš dokumentaciju, tako ćeš se osposobiti da sam tražiš rešenja za svoje probleme. Forum je dobro mesto da nađeš informacije ali vremenom postaje ograničenje upravo zbog brzine dobijanja povratne informacije.


 
Odgovor na temu

biske86
Ivan Biševac
Zubin Potok

Član broj: 62435
Poruke: 979
*.dynamic.isp.telekom.rs.

Sajt: biske.rs


+39 Profil

icon Re: Java StringBuffer04.11.2011. u 15:46 - pre 151 meseci
Ni sam nisam znao u kojim jedinicama se izražava kapacitet pa sam pitao na stackoverflow.com i dobio sam potvrdu da je to broj karaktera koje StringBuffer može da primi pre novog alociranja.
Obično je capacity = broj karaktera u baferu + 16.
Uostalom probaj i sam sledeći kod i menjaj dužinu stringa name:
Code (java):
public class Test {
     public static void main(String[] args) {
          StringBuffer name = new StringBuffer("elitesecurity.org");
          System.out.println("Length: " + name.length() + ", capacity: " + name.capacity());
     }
}

 
Odgovor na temu

_Abraxas
myth

Član broj: 154070
Poruke: 61
*.dynamic.sbb.rs.



Profil

icon Re: Java StringBuffer05.11.2011. u 22:56 - pre 151 meseci
biske86 ti je naveo jedan primer gde se moze koristiti StringBuffer ili StringBuilder.
Najcesci slucaj kada ja koristim ovu klasu je kada nadovezujem vise stringova (append() metoda). Ukoliko mozes da okvirno pretpostavis duzinu finalnog stringa i to prosledis kao parametar u konstruktoru StringBuffera, nadovezivanje ce se brze izvrsavati nego da to radis sa '+' operatorom (a i lepsi je kod :)). Za ovo nisam siguran, ali mislim da se ovaj operator kada su u pitanju stringovi kompajlira kao da si koristio StringBuilder.
Dakle, moja preporuka ti je da kada zelis da nadovezujes vise stringova i pritom mozes okvirno pretpostaviti duzinu finalnog stringa (ovo je bitno zbog brzine izvrsavanja), da koristis StringBuilder ili StringBuffer.

Pozdrav.
 
Odgovor na temu

darthskywalker
Luka Skajvoker

Član broj: 286923
Poruke: 25
*.PPPoE-7365.sa.bih.net.ba.



+1 Profil

icon Re: Java StringBuffer06.11.2011. u 11:02 - pre 151 meseci
Ok, hvala oboma na odgovorima :) pozz
 
Odgovor na temu

biske86
Ivan Biševac
Zubin Potok

Član broj: 62435
Poruke: 979
*.dynamic.isp.telekom.rs.

Sajt: biske.rs


+39 Profil

icon Re: Java StringBuffer06.11.2011. u 11:18 - pre 151 meseci
Razlika između StringBuilder-a i StringBuffera je taj što je StringBuffer bezbedan za niti, tj. moze se koristiti da mu pristupa više procesa. Ukoliko se radi o programu koji nema višenitni rad onda treba koristiti StringBuilder pošto se dobija na brzini.

Citat:
_Abraxas:Za ovo nisam siguran, ali mislim da se ovaj operator kada su u pitanju stringovi kompajlira kao da si koristio StringBuilder.


U pravu si. Evo primera iz dokumentacije (izvor http://download.oracle.com/jav...java/lang/StringBuffer.html=):
Code (java):
String buffers are used by the compiler to implement the binary string concatenation operator +. For example, the code:

     x = "a" + 4 + "c"
 
is compiled to the equivalent of:

     x = new StringBuffer().append("a").append(4).append("c")
                           .toString()


 
Odgovor na temu

[es] :: Java :: Java StringBuffer

[ Pregleda: 1923 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.