Permalänk
Medlem

Java - Programmering 1

Hej,

kan någon förklara varför man använder "" ?
I boken står det om man vill tilldela en char-variabel till en String-variabel kan man använda ""
ex. s = "" + c;

import javax.swing.*; public class Tecken1 { public static void main (String[] arg) { char c1, c2; c1 = '\u00D8'; c2 = Character.toLowerCase(c1); JOptionPane.showMessageDialog(null, "" + c1); JOptionPane.showMessageDialog(null, "" + c2); System.exit(0); // avslutar programmet } }

Permalänk
Medlem

@ReadyO:
Jag antar att showMessageDialog tar parametrarna (något, String)
Eftersom du har en variabel av typen char så kan du inte använda den som parameter.

Det du gör vid String s = "" + c är då att konkatinera en tom sträng med en char.

Då kan du anropa metoden showMessageDialog(något,s) för att uppfylla parametrarna.

Antag att du har en metod myMethod(String a, Strinb);
int one = 1; int two = 2;
Då kan du inte anropa myMethod(one,two)
utan måste göra int till String

Permalänk
Medlem

String i Java har ingen konstruktor som tar en char, dvs. man kan inte automatiskt konvertera en char till en String i Java. Däremot så är alla sträng-literaler instanser av String, t.ex. "", och operatorn + klarar av att konkatenera en char till en String. Så "" + c1 betyder helt enkelt att man tar en tom sträng och lägger till c1 till den.

Det finns dock många alternativ som man kan använda för att göra om en char till String, och "" + c är inte särskilt effektivt eftersom det innebär en massa onödigt jobb. Du kan istället använda t.ex Character.toString(c) for att konvertera en char c till en String. Det blir då också tydligare vad du vill åstadkomma.

Permalänk
Medlem

@NoToes:

borde man då inte få kompileringsfel? För att det går att exekvera pgmet utan "" och jag ser ingen skillnad.

Permalänk
Medlem

En String-variabel kan inte tilldelas ett char-värde. Däremot tillåter Java att du slår ihop en String med en char. String s = "" + c slår helt enkelt ihop en tom sträng med en char, och resultatet blir en sträng med samma innehåll som c.

Ett annat alternativ är String s = Character.toString(c);

Edit: Inget nytt som perost inte redan skrivit, men låter det stå kvar.

Permalänk
Medlem
Skrivet av ReadyO:

@NoToes:

borde man då inte få kompileringsfel? För att det går att exekvera pgmet utan "" och jag ser ingen skillnad.

Om man skriver

char c = 'a'; String s = c;

?

Det bör ge kompileringsfel.

Permalänk
Medlem

@Tazavoo:

Jag har förstått det som står i boken om tilldelningen från char till String: String s = "" + c
men jag förstår inte: JOptionPane.showMessageDialog(null, "" + c1); räknas det som en String variabel? :S

Permalänk
Medlem
Skrivet av ReadyO:

@Tazavoo:

Jag har förstått det som står i boken om tilldelningen från char till String: String s = "" + c
men jag förstår inte: JOptionPane.showMessageDialog(null, "" + c1); räknas det som en String variabel? :S

http://kaioa.com/node/59

Där får du lite insyn om hur "+" fungerar behind the scenes. Det räknas som en string ja. Du "lägger till" värdet i c till strängen i din MessageDialog.

Visa signatur

Still play with birds like I hang with mother goose.

Permalänk

OM man vill göra en char till en sträng vill jag varmt rekommendera Character.toString(char), eller String.valueOf(char), istället för ""+c eftersom det är betydligt tydligare.

De flesta tidigare inlägg är dock ordentligt överilade, det går alldeles utmärkt att använda JOptionPane.showMessageDialog(null, char); numera. Om det inte ska köras i nån svingammal javaversion så behöver du inte bry dig om att göra konverteringen alls.

Edit: ordval

Permalänk
Medlem

Tack för alla svar!