1. 数据类型

Java是一种强类型语言(每一个变量必须声明一种类型)。
Java中一共有8中基本数据类型,其中4中整型,2种浮点型,1中用于表示Unicode编码的字符单元的字符类型char,和1种用于表示真值的boolean类型。

1.1 整型

image.png
Java中,整型的范围与运行Java代码的机器无关,而C和C++则不一样,必须针对不同的处理器选择最有效的整型类型。Java没有无符号类型。
长整型数值后面有一个后缀L(如4000000000L)。十六进制数值有一个前缀0x(如0xCAFF),八进制有一个前缀0(如010对应八进制就是8)。

1.2 浮点型

image.png
float类型的数值有一个后缀F(如3.14F)。没有后缀F的浮点数值默认为double类型,当然也可以加后缀D。
浮点型数值用于计算会出现舍入误差,解决办法是使用BigDecimal类。

1.3 char

char占2个字节,用于存储Unicode字符。
https://blog.csdn.net/qq_36761831/article/details/82291166

1.4 boolean类型

boolean用一位即可存储。boolean类型有两个值:false和true,用于判断逻辑条件。整型值和布尔值之间不能相互转换。

1.5 数值类型之间的转换

image.png
图中,6个实线箭头表示无信息丢失的转换,3个虚线箭头表示可能有精度损失的转换。
强制类型转换:int转double可以自动转换,double转int则需要强制类型转换。
double x = 9.997;
int nx = (int)x;

2. 字符串

从概念上讲,Java字符串就是Unicode字符序列。例如,串”Java\u2122”由5个Unicode字符J,a,v,a和™组成。Java没有内置的字符串类型,而是在标准Java类库中提供了一个预定义类String。每个用双引号括起来的字符串都是String的一个实例。

类初始化顺序

父类–静态变量/父类–静态初始化块
子类–静态变量/子类–静态初始化块
父类–变量/父类–初始化块
父类–构造器
子类–变量/子类–初始化块
子类–构造器
静态变量和静态代码块执行先后顺序、变量和初始化代码块执行顺序只与位置有关。
注意:子类可见(没有被private修饰的方法)的实例方法有方法重写。

  1. public class Father {
  2. private int i = test();
  3. private static int j = method();
  4. static {
  5. System.out.print("(1)");
  6. }
  7. Father(){
  8. System.out.print("(2)");
  9. }
  10. {
  11. System.out.print("(3)");
  12. }
  13. public int test(){
  14. System.out.print("(4)");
  15. return 1;
  16. }
  17. public static int method(){
  18. System.out.print("(5)");
  19. return 1;
  20. }
  21. }
public class Son extends Father{
    private int i = test();
    private static int j = method();
    static {
        System.out.print("(6)");
    }
    Son(){
        System.out.print("(7)");
    }
    {
        System.out.print("(8)");
    }

    @Override
    public int test() {
        System.out.print("(9)");
        return 1;
    }
    public static int method(){
        System.out.print("(10)");
        return 1;
    }

    public static void main(String[] args) {
        Son s1 = new Son();
        System.out.println();
        Son s2 = new Son();
//        (5)(1)(10)(6)(9)(3)(2)(9)(8)(7)
//        (9)(3)(2)(9)(8)(7)
    }
}

equals和==

“==”的使用

  • ==既可以比较基本数据类型,又可以比较引用类型
  • ==比较基本数据类型是比较值,比较引用类型是比较内存地址

equals的使用

  • equals只能用于比较引用类型
  • 如果没有重写equals方法,则equals底层默认使用的是==来比较(String类型jdk重写了equals方法) ```java public class TestEquals { public static void main(String[] args) {

      String s1 = new String("abd");
      String s2 = new String("abd");
      System.out.println(s1==s2);
      System.out.println(s1.equals(s2));
      // HashSet底层判断重复是通过hashCode值
      Set<String> set1 = new HashSet<>();
      set1.add(s1);
      set1.add(s2);
      System.out.println(set1.size());
    
      Person p1 = new Person("p");
      Person p2 = new Person("p");
      System.out.println(p1 == p2);
      System.out.println(p1.equals(p2));
      Set<Person> set2 = new HashSet<>();
      set2.add(p1);
      set2.add(p2);
      System.out.println(set2.size());
    

    } }

class Person{ private String name;

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public Person(String name){
    this.name = name;
}

} ``` 更多相关的比较