jaka jest domyślna wartość char?


89
char c = '\u0000';

Kiedy drukuję c, w oknie wiersza poleceń wyświetla się „a”.

Jaka jest więc domyślna wartość pola typu char?

Ktoś powiedział „\ u0000” oznacza zero w Unicode; czy to prawda?


możesz sprawdzić, czy Twój znak ma wartość domyślną:char == 0
ACV

Odpowiedzi:


105

Wartością domyślną charatrybutu jest rzeczywiście '\u0000'(znak null), jak określono w specyfikacji języka Java, sekcja §4.12.5 Początkowe wartości zmiennych .

W moim systemie linia System.out.println('\u0000');jest wyświetlana jako mały kwadrat, co oznacza, że ​​nie jest to znak drukowalny - zgodnie z oczekiwaniami.


26
Ważne jest, aby pamiętać, że '\u0000'nie jest to ta sama wartość, co null
Edd,

Co to jest null character? Niektóre odpowiedzi na te pytania odnoszą się do wartości domyślnej jako znaku null.
Quazi Irfan

3
@ Óscar López, A co z char '\ 0'? one nie są takie same ?
Tarik

5
@Tarik tak, są takie same.
Óscar López

3
@iamcreasy to, co mówisz, jest poprawne. Moja uwaga jest taka, że ​​„znak zerowy” to znak. To nie jest nullw kategoriach java tzn \u0000 == nullwrócifalse
Edd

30

„\ u0000” to domyślna wartość znaku. Jego odpowiednik dziesiętny to 0.

Gdy deklarujesz jakąś zmienną typu char bez jej inicjalizacji, domyślnie zostanie do niej przypisane '\ u0000'.

zobacz ten kod

public class Test {
    char c;

    public static void main(String args[]) throws Exception {
        Test t = new Test();
        char c1 = '\u0000';
        System.out.println(t.c);
        System.out.println(c1);
        System.out.println(t.c == c1);
    }
}

Ten kod wyświetli prawdę dla ostatniego wydruku.


9

Wartość domyślna Character to Character.MIN_VALUE, która jest wewnętrznie reprezentowana jakoMIN_VALUE = '\u0000'

Dodatkowo możesz sprawdzić, czy pole znaku zawiera domyślną wartość jako

Character DEFAULT_CHAR = new Character(Character.MIN_VALUE);
if (DEFAULT_CHAR.compareTo((Character) value) == 0)
{

}

7

'\u0000'oznacza null. Więc jeśli wydrukujesz niezainicjowaną zmienną char, nic nie otrzymasz.


2
Właściwie wystąpiłby błąd kompilacji;) `` \ u0000 '' to domyślna wartość, z którą pole znaku jest `` inicjalizowane ''
Edd

1
Nic nie dostaniesz. Otrzymasz białą przestrzeń lub kwadrat.
Roszana Pitigala

Otrzymałem „0”, jeśli wstawię zarówno c, jak i c1 jako „\ u0000” System.out.println (c + c1);
alan


0

Domyślny znak to znak o wartości int równej 0 (zero).

char NULLCHAR = (char) 0;

char NULLCHAR = '\ 0';


0

jego kuszące powiedzenie jako biała spacja lub liczba całkowita 0, jak na poniższy dowód

char c1 = '\u0000';
System.out.println("*"+c1+"*");
System.out.println((int)c1);

ale nie powiedziałbym tego, ponieważ może to różnić się na różnych platformach lub w przyszłości. Najbardziej zależy mi na tym, że nigdy nie użyję tej wartości domyślnej, więc przed użyciem jakiegokolwiek znaku po prostu sprawdź, czy jest to \ u0000 lub nie, a następnie użyj go, aby uniknąć nieporozumień w programach. To takie proste.


0

Domyślna wartość typu danych char to „\ u0000” (lub 0), a maksymalna wartość „\ uffff” (lub 65 535 włącznie).

Możesz zobaczyć informacje tutaj .


2
Pytanie ma już zaakceptowaną odpowiedź oraz kilka innych odpowiedzi. Aby Twoja odpowiedź była użyteczna, powinna zawierać nowe przydatne informacje lub nowe spojrzenie na problem. Samo powtórzenie informacji w innych odpowiedziach nie jest pomocne.
AdrianHHH

0

Zauważ, że istnieje wyraźna różnica między wartością null a zerem. W http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html (przywołanym powyżej), stwierdza się: -

Istnieje również specjalny literał null, którego można użyć jako wartości dla dowolnego typu odwołania. null można przypisać do dowolnej zmiennej, z wyjątkiem zmiennych typu pierwotnego. Niewiele można zrobić z wartością zerową poza testowaniem jej obecności. Dlatego wartość null jest często używana w programach jako znacznik wskazujący, że jakiś obiekt jest niedostępny.

Dlatego poniższe stwierdzenia dadzą ci błąd, a nie inne: -

char a = null; // Niezgodność typów: nie można przekonwertować wartości null na znak.

char b = 0; // Prawidłowa składnia.


0

\u0000 jest domyślną wartością typu char w Javie

Jak wspominali inni, możesz użyć porównania, aby sprawdzić wartość niezainicjowanej zmiennej.

char ch;
if(ch==0)
    System.out.println("Default value is the null character");

-1

Myślę, że tak '\u00000'lub ''raczej niż '\u0000' (pierwsza ma 5 zer, a ostatnia cztery zera).


@ JohannesH.- to wygląda na odpowiedź dla mnie. Oznaczanie tego jako „brak odpowiedzi” nie jest poprawne IMO.
Krease

-1

Wartość domyślna charto \ u0000

public class DefaultValues {
char varChar;
public static void main(String...l)
 {
    DefaultValues ob =new DefaultValues();
    System.out.println(ob.varChar=='\u0000');
 }  
}

To wróci prawda


-1

Domyślna wartość char to null, czyli „\ u0000” zgodnie z wykresem Unicode . Zobaczmy, jak to działa podczas drukowania.

public class Test_Class {   
     char c;
     void printAll() {  
       System.out.println("c = " + c);
    }   
    public static void main(String[] args) {    
    Test_Class f = new Test_Class();    
    f.printAll();   
    } }

Uwaga: dane wyjściowe są puste.


-2

Domyślną wartością typu pierwotnego typu char jest „\ u0000” (znak pusty), jak określono w specyfikacji języka Java.

Skrótem dla „u0000” jest „\ 0”, więc wartość null może być reprezentowana przez „u0000” lub „\ 0”.

Poniższy program Java weryfikuje reprezentacje wartości null przy użyciu pola znaku instancji „c”.

public class DefaultValueForchar {  
    char c;
    public static void main(String[] args) {
        char c0 = '\0';
        char cu0000 = '\u0000';
        DefaultValueForchar obj = new DefaultValueForchar();
        System.out.println(obj.c);
        System.out.println(c0);
        System.out.println(cu0000);
        System.out.println(c0==cu0000);
        System.out.println(obj.c==c0);
        System.out.println(obj.c==cu0000);
    }

}

wynik:

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.