|
|
|
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
| ||
| ||
| ||
| ||
kann mir dabei auch zufällig jemand auf die schnelle weiterhelfen?
Wenn Du dabei Hilfe brauchst, solltest Du den Stoff wiederholen.kann mir dabei auch zufällig jemand auf die schnelle weiterhelfen?
da könntest du recht haben.hilft mir nur jetzt nicht weiterWenn Du dabei Hilfe brauchst, solltest Du den Stoff wiederholen.
( ( 23 + 17 ) != 40 ) && true
(40 != 40) && true
false && true
naja, und eine UND-Verknüpfung ist nur wahr, wenn alle Operanden wahr sind, also ist das Ergebnis false
. Der Typ für true/false ist natürlich boolean.Oder generell (über eine Ausgabe) auf den (möglichen) Datentyp schliessen ginge über Reflection oder instanceof: https://stackoverflow.com/questions/2674554/how-do-you-know-a-variable-type-in-javafehlenden angaben
Das sind (bis auf eine Ausnahme) alles primitive Datentypen, und wer damit nicht klar kommt, sollte auf jeden Fall keine Reflection nutzen, mMn noch nicht mal das dafür nötige Autoboxing...Oder generell (über eine Ausgabe) auf den (möglichen) Datentyp schliessen ginge über Reflection oder instanceof: https://stackoverflow.com/questions/2674554/how-do-you-know-a-variable-type-in-java
Also wie ich es verstehe (also kann falsch sein)Alles klar Danke.
((5 – 3) / 2 < 5 ) == true
Der Ausdruck macht doch so keinen sinn oder?
import jdk.jshell.JShell;
import jdk.jshell.SnippetEvent;
public class Tabelle {
public static void main(String[] args) {
String[] sa = {
"23.4 + 7",
"30 - 5",
"(10 / 3) + 0.5",
"'a'=='b'",
"\"Pro\" + \"gramm\"",
"2!=3",
"11 <= 22/2",
"1 < 22/2",
"((5 - 3) / 2 < 5 ) == true",
"! ( ( 23 + 17 ) == 40 )",
"( ( 23 + 17 ) != 40 ) && true",
"true || (2 < 3)",
"( 'a' == 'a' ) && ( 2 < 3 )",
"! ('a' == 'b') || !(17 == 33)",
};
try (JShell js = JShell.create()) {
for (String string : sa) {
SnippetEvent eval1 = js.eval("var a = " + string + ";").get(0);
SnippetEvent eval2 = js.eval("((Object)a).getClass().getName()").get(0);
System.out.printf("%-40s%-20s%-20s%n", string, eval1.value(), eval2.value());
}
}
}
}
23.4 + 7 30.4 "java.lang.Double"
30 - 5 25 "java.lang.Integer"
(10 / 3) + 0.5 3.5 "java.lang.Double"
'a'=='b' false "java.lang.Boolean"
"Pro" + "gramm" "Programm" "java.lang.String"
2!=3 true "java.lang.Boolean"
11 <= 22/2 true "java.lang.Boolean"
1 < 22/2 true "java.lang.Boolean"
((5 - 3) / 2 < 5 ) == true true "java.lang.Boolean"
! ( ( 23 + 17 ) == 40 ) false "java.lang.Boolean"
( ( 23 + 17 ) != 40 ) && true false "java.lang.Boolean"
true || (2 < 3) true "java.lang.Boolean"
( 'a' == 'a' ) && ( 2 < 3 ) true "java.lang.Boolean"
! ('a' == 'b') || !(17 == 33) true "java.lang.Boolean"
... == true
ist immer Hinweis darauf, dass das Ergebnis des Ausdrucks boolean ist (insofern der Ausdruck syntaktisch korrekt ist) und ist immer "überflüssig". Wär's ne Abgabe, gäbe dafür 1/14 PunktenIch sehe schon, die Boolean gewinnen die Oberhand:
Code:23.4 + 7 30.4 "java.lang.Double" 30 - 5 25 "java.lang.Integer" (10 / 3) + 0.5 3.5 "java.lang.Double" 'a'=='b' false "java.lang.Boolean" "Pro" + "gramm" "Programm" "java.lang.String" 2!=3 true "java.lang.Boolean" 11 <= 22/2 true "java.lang.Boolean" 1 < 22/2 true "java.lang.Boolean" ((5 - 3) / 2 < 5 ) == true true "java.lang.Boolean" ! ( ( 23 + 17 ) == 40 ) false "java.lang.Boolean" ( ( 23 + 17 ) != 40 ) && true false "java.lang.Boolean" true || (2 < 3) true "java.lang.Boolean" ( 'a' == 'a' ) && ( 2 < 3 ) true "java.lang.Boolean" ! ('a' == 'b') || !(17 == 33) true "java.lang.Boolean"
Ne, alle Punkte, weil die Tabelle richtig ist. Aber egal, nichts was du oder ich entscheiden müssten.Wär's ne Abgabe, gäbe dafür 1/14 Punkten
Mit Ausnahme des fünften Ausdrucks resultieren alle anderen in ein Ergebnis primitiven Typs.Ne, alle Punkte, weil die Tabelle richtig ist.
' a'
angegeben.Es kommt drauf an, wie man die Variable deklarieren würde, also ob ichMit Ausnahme des fünften Ausdrucks resultieren alle anderen in ein Ergebnis primitiven Typs.
double d = 23.4 + 7;
oder Double d = 23.4 + 7;
schreibe. Bei Letzterem greift das Auto-boxing. Außerdem wenn man schon so kleinlich ist, dann wäre "Programm"
auch "falsch", weil es die Hochkommata enthält...Ja, das hatte ich schon "wegkorrigiert". Sonst hätte man auch "ungültiger Ausdruck/Term" oder "null" schreiben können.aber im vorletzten Ausdruck sehe ich ein ungültiges' a'
angegeben.
...und Autoboxing greift nur weil das Ergebnis ein primitiver Typ ist.Es kommt drauf an, wie man die Variable deklarieren würde, also ob ichdouble d = 23.4 + 7;
oderDouble d = 23.4 + 7;
schreibe.
Nein?! Der Typ eines Ausdrucks hängt nicht davon ab, welcher Variablen ich das Ergebnis des Ausdrucks zuweise... ein Ausdruck ist ein Ausdruck und hat einen definierten Typ. Wenn ich den Wert, den dieser Ausdruck generiert, dann einer Variablen zuweise oder z.B. als aktuelles Argument bei einem Methodenaufruf verwende, dann greifen Konvertierungsregeln (wie eben das von dir erwähnte Autoboxing oder Widening).Es kommt drauf an, wie man die Variable deklarieren würde, also ob ichdouble d = 23.4 + 7;
oderDouble d = 23.4 + 7;
schreibe.
Doch schon, nur eben nicht der konkrete Typ.Das macht dann aber nicht den Typ des Ausdrucks zu `java.lang.Object`.