2013-07-29 10 views
10

Dlaczego moja instrukcja "assert" nie daje wyniku? Myślę, że pierwsze oświadczenie assert powinno zawieść, ale nie widzę niczego wyświetlanego w Eclipse.Błąd asercji Java nie powoduje błędu

Używam Eclipse do uruchomienia tego programu.

package java.first; 

public class test { 
    public static void main(String[] args) throws Exception { 
    String s = "test1"; 
    assert (s == "test"); 
    s = "test"; 
    assert (s == "test"); 
    } 
} 

Odpowiedz

7

Musisz włączyć twierdzeń z -ea argumentu (skrót -enableassertions).

w Eclipse:

  • prawym przyciskiem myszy na projekt, a następnie "Uruchom jako""Run konfiguracje ..."
  • Wybierz "argumentami" zakładka
  • Umieść -ea w polu "Argumenty VM" ".
  • Wybierz "Zastosuj"

Teraz bieganie powinno spowodować AssertionError.

18

Musisz ustawić -ea (Włącz asercje) w opcjach JVM.


niezwiązane, ale prawie zawsze chcą string1.equals(string2) zamiast ==.

+0

opracowania na ten temat, można zrozumieć, operator '==' jakby odpowiedzi na następujące pytanie: odniesienie do tego obiektu punktach do tego samego odniesienia do tego innego obiektu ? są to 2 faceci przydzielone w tym samym kawałku pamięci, co jest prawdą tylko wtedy, gdy istnieje 1 i tylko 1 przypadek takiego obiektu w całym kontekście aplikacji (singleton). Innymi słowy instancja obiektu jest tylko '==' dla siebie. Ponieważ porównujesz to z inną instancją, która ma tę samą wartość, musisz użyć metody 'equals' jak podano powyżej. – VallaDanger

+0

Kiedy mówisz '(s ==" test ")' faktycznie tworzysz nową instancję String z wartością 'test', więc pytasz, czy ta nowa instancja jest' == 'do' s' jest absolutnie nie jest prawdą 'chyba że użyjesz metody' String.intern() ', która zapewni, że wszystkie łańcuchy o tych samych wartościach współużytkują tę samą pamięć. Istnieje wiele więcej informacji na temat równości obiektów, powód, dla którego zaleciłbym, aby skuteczna wersja Java (wydanie 2, rozdział 3, pozycja 8) była szansą. – VallaDanger

1

Musisz włączyć to za pomocą argumentu -e.

4

Musisz włączyć sprawdzanie asercji w czasie wykonywania. Dokumentacja Oracle Java stwierdza:

Aby włączyć twierdzenia w różnych granulacji, użyj -enableassertions lub -EA, przełącznika. Aby wyłączyć asercje na różnych ziarnistościach, użyj polecenia -disable lub przełącznika -da.

Pełne informacje na stronie Oracle w http://docs.oracle.com/javase/1.4.2/docs/guide/lang/assert.html#enable-disable

Aby zmienić opcje run-time dla programów uruchamianych wewnątrz Eclipse trzeba będzie zmodyfikować parametry Eclipse zjazdy z programu. Jak to zrobić, będą się różnić w zależności od używanej wersji Eclipse, ale oto jak to działa w Eclipse Europa ...

  • Otwórz Run Dialog (powinno to być opcja w menu „Run”).
  • Kliknij zakładkę "(x) = Argumenty."
  • W polu "Argumenty maszyny wirtualnej" wpisz wartość -ea, aby włączyć potwierdzenia.
  • Kliknij przycisk "Zastosuj".

Answer „pożyczył” od http://www.coderanch.com/t/416987/vc/enable-Assertions-eclipse

Powiązane problemy