Trädvy Permalänk
Medlem
Registrerad
Sep 2015

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 } }

Trädvy Permalänk
Medlem
Plats
Göteborg
Registrerad
Nov 2009

@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

Trädvy Permalänk
Medlem
Plats
Linköping
Registrerad
Jun 2007

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.

Trädvy Permalänk
Medlem
Registrerad
Sep 2015

@NoToes:

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

Trädvy Permalänk
Medlem
Plats
Finland
Registrerad
Maj 2004

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.

Trädvy Permalänk
Medlem
Plats
Finland
Registrerad
Maj 2004
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.

Trädvy Permalänk
Medlem
Registrerad
Sep 2015

@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

Trädvy Permalänk
Medlem
Registrerad
Apr 2013
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.

Still play with birds like I hang with mother goose.

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Dec 2010

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

Trädvy Permalänk
Medlem
Registrerad
Sep 2015

Tack för alla svar!