Wpis z mikrobloga

Szkoda, że musieliśmy to jeszcze raz przechodzić ( ͡° ͜ʖ ͡°)

Tak samo jak w zagadce 1 i 2, wyjaśnieniem jest:

Wszystkie operacje + - * / % ++ (prefix i postfix) -- (prefix i postfix), a także operacje binarne & | ^ powodują, że zmienna zostanie scastoawna do inta albo longa.

The numerical operators, which result in a value of type int or long:

The additive operators
  • Odpowiedz
@interface:

Wszystkie operacje + - * / % ++ (prefix i postfix) -- (prefix i postfix), a także operacje binarne & | ^ powodują, że zmienna zostanie scastoawna do inta albo longa.


Huh? Z tego tekstu wynika że

4 + 5.8
zostanie zcastowane do inta albo longa? No chyba nie bardzo ;)
  • Odpowiedz
@Fuv: wystarczy że przeczytasz resztę :
dzieje się tak gdy dodajesz do inta, jak dodajesz do floata/double to następuje castowanie do float/double
https://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.2.2
a nastęnie w sekcji 4.2.4

4.2.4. Floating-Point Operations

The Java programming language provides a number of operators that act on floating-point values:
The numerical operators, which result in a value of type float or double:
The unary plus and minus operators + and - (§15.15.3, §15.15.4)

jedynei zasada
  • Odpowiedz
  • 2
@interface

jedynei zasada jest taka, że wykonując opracje arytmetyczne lub binarne zawsze zwiększany jest zakres binarny rezultatu

I to powinieneś napisać w wyjaśnieniu. Plus to co bodajże pisałeś we wcześniejszych zagadkach:

A compound assignment expression of the form E1 op= E2 is equivalent to E1 = (T)((E1) op (E2)), where T is the type of E1, except that E1 is evaluated only once.

I to jest poprawne wyjaśnienie. Przy takim wyjaśnieniu jak
  • Odpowiedz
są niepoprawne bo jest to przypisanie inta do shorta, można to zrobić castując jawnie do shorta tak jak w opcji pierwszej.


@interface:

Short s = 1;
s -= (short)1;

nie dziala
  • Odpowiedz
@interface: chodzio mi o to ze:

Short s = 1;
s -= (short)1;

tutaj nie ma autoboxing bo wlasnie ten int jest jako wynik -. A mozna boxowac tylko z short do Short, int do Integer, itd

short s = 1;
s -= 1;

tutaj jest implicit conversion, kompilator wrzuca instrukcje i2s gdy widzi int.
  • Odpowiedz
s -= (short)1;


@afe1: ale to jest równoznaczne z

s = s - (short)1


a wynikiem tej operacji jest int

więc jest jest to równoznaczne z:

(short) s = (int)((short)s - (short)1)
  • Odpowiedz
ja moge w tym enumie przechowac singletona, dodac kolejne modyfikowalne pola, porownac klase uzywajac .equals albo ==, enum moze dziedziczyc z interface albo innej klasy i zawsze mam wtedy gwarancje ze tylko jeden enum istnieje w calym JVM ( ͡° ͜ʖ ͡°)


@interface: enum może dziedziczyć z innej klasy? Od kiedy?
  • Odpowiedz
@63274682374: od javy8

public class Main {

public static void main(String... args) {
T.printThing();
}

interface Things {
default void printThing() {
System.out.println("thing");
}
}
enum EnumThing implements Things {
T;
}

}
  • Odpowiedz
@63274682374: w Javie interface to rodzaj klasy która jest w pełni abstrakcyjna (poza metodami domyślnymi), a teraz zapytam inaczej, czy to to klasa?
public abstract class AbstracThing { abstract void printThing(); }

przecież to jest funkcjonalnie różnoznaczne z interfacem.
  • Odpowiedz
Tak, to jest klasa, mówi o tym słowo kluczowe 'class'.
Nie, interfejs nie jest rodzajem klasy.
I nie, klasa którą napisałeś funkcjonalnie nie jest równoważna z interfejsem.
  • Odpowiedz