1. 数据类型
Java是一种强类型语言(每一个变量必须声明一种类型)。
Java中一共有8中基本数据类型,其中4中整型,2种浮点型,1中用于表示Unicode编码的字符单元的字符类型char,和1种用于表示真值的boolean类型。
1.1 整型
Java中,整型的范围与运行Java代码的机器无关,而C和C++则不一样,必须针对不同的处理器选择最有效的整型类型。Java没有无符号类型。
长整型数值后面有一个后缀L(如4000000000L)。十六进制数值有一个前缀0x(如0xCAFF),八进制有一个前缀0(如010对应八进制就是8)。
1.2 浮点型
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 数值类型之间的转换
图中,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修饰的方法)的实例方法有方法重写。
public class Father {
private int i = test();
private static int j = method();
static {
System.out.print("(1)");
}
Father(){
System.out.print("(2)");
}
{
System.out.print("(3)");
}
public int test(){
System.out.print("(4)");
return 1;
}
public static int method(){
System.out.print("(5)");
return 1;
}
}
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;
}
} ``` 更多相关的比较