int 和 Integer 的区别
- 数据类型不同:
int
是基础数据类型,而Integer
是包装数据类型;
- 默认值不同:
int
的默认值是 0,而Integer
的默认值是null
;
- 内存中存储的方式不同: int 在内存中直接存储的是数据值,而 Integer 实际存储的是对象引用,当
new
一个Integer
时实际上是生成一个指针指向此对象;
- 内存中存储的方式不同:
int
在内存中直接存储的是数据值,而Integer
实际存储的是对象引用,当new
一个Integer
时实际上是生成一个指针指向此对象;
- 变量的比较方式不同:
int
可以使用==
来对比两个变量是否相等,而Integer
一定要使用equals
来比较两个变量是否相等。
变量之间的比较
- 两个new Integer()变量比较,永远是false。
原因:因为new生成的是两个对象,其内存地址不同
- Integer变量 和 new Integer() 变量比较 ,永远为 false。
原因:因为 Integer变量 指向的是java常量池中的对象,而 new Integer() 的变量指向堆中新建的对象,两者在内存中的地址不同。
- 两个Integer 变量比较,如果两个变量的值在区间==-128到127== 之间,则比较结果为true,如果两个变量的值不在此区间,则比较结果为 false。
原因:Java对于-128到127之间的数,会进行缓存。
所以 Integer i = 127 时,会将127进行缓存,下次再写Integer j = 127时,就会直接从缓存中取,就不会new了。
- int变量与 Integer、new Integer()比较时,只要两个的值是相等的,则为true.
String和StringBuffer的区别
String:
- String创建的对象是不可变的,一旦创建不可改变
- 对象值可以改变其实是创建了一个新的对象,然后把新的值保存进去
- String类被final修饰,不可以被继承
- String创建的对象的值存在于常量池,不用的时候不会被销毁
- String运行时间较长
- String适用于比较短而小的字符串
![[Pasted image 20230513182656.png]]
StringBuffer:
- StringBuffer创建的对象是可变的
- 它的改变不像String那样重新创建对象,而是通过构造方法(如图)
- StringBuffer创建的对象的值存在于栈区,不用的时候会被销毁
- StringBuffer运行时间较短
- StringBuffer适用于比较长的字符串、比较多的字符串
![[Pasted image 20230513182735.png]]
在线程安全上,StringBuffer的所有方法都是同步的,因此多个线程同时访问一个StringBuffer对象时,不会出现数据不一致的情况。这使得StringBuffer非常适合用于多线程编程。
StringBuffer适用于在多线程环境下进行大量字符串操作,或者在单线程环境下进行复杂的字符串操作的场景。
super
在Java中,super
和this
都是关键字,用于操作类的属性和方法。它们之间的区别如下:
super
关键字用于访问父类中的属性和方法。可以使用它来调用父类中被子类覆盖的方法。使用super调用方法时,也可以传递参数给父类的构造函数。super
只能在子类中使用,并且必须位于方法的第一行。this
关键字用于访问当前对象的属性和方法。它可以用来消除命名冲突,即在同一个类中,如果局部变量和成员变量同名,可以用this关键字来区分。另外,this
也可以用于构造函数中,调用其他的构造函数,使用this调用构造函数时,必须位于构造函数的第一行。
好的,以下是一个使用super和this关键字的简单Java代码示例:
public class Animal {
private String name;
public Animal(String name) {
this.name = name;
}
public void eat() {
System.out.println(name + " is eating.");
}
}
//继承Animal
public class Dog extends Animal {
public Dog(String name) {
super(name);//向父类传递name
}
public void bark() {
System.out.println("The dog is barking.");
}
@Override
public void eat() {
super.eat(); // 调用父类的方法
System.out.println("The dog is chewing.");
}
}
public class Main {
public static void main(String[] args) {
Dog dog = new Dog("Charlie");
dog.bark(); // 输出: The dog is barking.
dog.eat(); // 输出: Charlie is eating. \n The dog is chewing.
}
}
在main方法中,创建了一个Dog对象,然后调用了它的bark和eat方法。在Dog的eat方法中,使用了super关键字来调用父类的eat方法,在输出之前加入了一些额外的内容。
总结起来,super
关键字与父类有关,而this关键字与当前对象有关。它们可以用于不同的目的。
三元表达
在编程中,三元表达式也叫三目运算符,它是一种简化条件判断的表达方式,通常用于简单的if-else语句中。三元表达式的基本语法如下所示:
condition ? value1 : value2
其中,condition
是一个条件表达式,如果结果为true,则返回value1
,否则返回value2
。
下面是一个示例:
int a = 10;
int b = 20;
int max = a > b ? a : b;
在上面的例子中,max
的值将会是20,因为条件表达式 a > b
是false,所以三元表达式返回了 b
。
三元表达式通常用于简单的条件判断语句中,可以用来代替 if-else
语句。例如,在Android中,可以使用三元表达式设置控件的可见性,示例代码如下:
Button button = findViewById(R.id.button);
// 如果一个条件成立,则设置控件为可见,否则设置为不可见
button.setVisibility(condition ? View.VISIBLE : View.INVISIBLE);
三元表达式可以帮助减少代码量,提高代码的可读性和可维护性,但是过度使用会降低代码的可读性,因此,在使用时要注意适当控制。
静态和非静态
静态和非静态是面向对象编程语言中的一个概念,用于描述类成员的特性。
静态(static)是指属于类本身的特性,不是属于任何一个类实例的特性。在 Java 中,静态成员是在类第一次加载时就被创建,而不是在类被实例化时才创建。静态成员常常使用类名.成员名的方式进行访问,而不需要创建类的实例。
非静态(non-static)则是对象特有的,是随着对象的创建而创建的成员,随着对象的销毁而释放。在 Java 中,非静态成员是在类被实例化时创建的,每个类实例都会有自己的非静态成员。非静态成员只能通过对象来访问,而不能通过类名直接访问。## int 和 Integer 的区别
- 数据类型不同:
int
是基础数据类型,而Integer
是包装数据类型;
- 默认值不同:
int
的默认值是 0,而Integer
的默认值是null
;
- 内存中存储的方式不同: int 在内存中直接存储的是数据值,而 Integer 实际存储的是对象引用,当
new
一个Integer
时实际上是生成一个指针指向此对象;
- 内存中存储的方式不同:
int
在内存中直接存储的是数据值,而Integer
实际存储的是对象引用,当new
一个Integer
时实际上是生成一个指针指向此对象;
- 变量的比较方式不同:
int
可以使用==
来对比两个变量是否相等,而Integer
一定要使用equals
来比较两个变量是否相等。
变量之间的比较
- 两个new Integer()变量比较,永远是false。
原因:因为new生成的是两个对象,其内存地址不同
- Integer变量 和 new Integer() 变量比较 ,永远为 false。
原因:因为 Integer变量 指向的是java常量池中的对象,而 new Integer() 的变量指向堆中新建的对象,两者在内存中的地址不同。
- 两个Integer 变量比较,如果两个变量的值在区间==-128到127== 之间,则比较结果为true,如果两个变量的值不在此区间,则比较结果为 false。
原因:Java对于-128到127之间的数,会进行缓存。
所以 Integer i = 127 时,会将127进行缓存,下次再写Integer j = 127时,就会直接从缓存中取,就不会new了。
- int变量与 Integer、new Integer()比较时,只要两个的值是相等的,则为true.
String和StringBuffer的区别
String:
- String创建的对象是不可变的,一旦创建不可改变
- 对象值可以改变其实是创建了一个新的对象,然后把新的值保存进去
- String类被final修饰,不可以被继承
- String创建的对象的值存在于常量池,不用的时候不会被销毁
- String运行时间较长
- String适用于比较短而小的字符串
![[Pasted image 20230513182656.png]]
StringBuffer:
- StringBuffer创建的对象是可变的
- 它的改变不像String那样重新创建对象,而是通过构造方法(如图)
- StringBuffer创建的对象的值存在于栈区,不用的时候会被销毁
- StringBuffer运行时间较短
- StringBuffer适用于比较长的字符串、比较多的字符串
在线程安全上,StringBuffer的所有方法都是同步的,因此多个线程同时访问一个StringBuffer对象时,不会出现数据不一致的情况。这使得StringBuffer非常适合用于多线程编程。
StringBuffer适用于在多线程环境下进行大量字符串操作,或者在单线程环境下进行复杂的字符串操作的场景。
super
在Java中,super
和this
都是关键字,用于操作类的属性和方法。它们之间的区别如下:
super
关键字用于访问父类中的属性和方法。可以使用它来调用父类中被子类覆盖的方法。使用super调用方法时,也可以传递参数给父类的构造函数。super
只能在子类中使用,并且必须位于方法的第一行。this
关键字用于访问当前对象的属性和方法。它可以用来消除命名冲突,即在同一个类中,如果局部变量和成员变量同名,可以用this关键字来区分。另外,this
也可以用于构造函数中,调用其他的构造函数,使用this调用构造函数时,必须位于构造函数的第一行。
好的,以下是一个使用super和this关键字的简单Java代码示例:
public class Animal {
private String name;
public Animal(String name) {
this.name = name;
}
public void eat() {
System.out.println(name + " is eating.");
}
}
//继承Animal
public class Dog extends Animal {
public Dog(String name) {
super(name);//向父类传递name
}
public void bark() {
System.out.println("The dog is barking.");
}
@Override
public void eat() {
super.eat(); // 调用父类的方法
System.out.println("The dog is chewing.");
}
}
public class Main {
public static void main(String[] args) {
Dog dog = new Dog("Charlie");
dog.bark(); // 输出: The dog is barking.
dog.eat(); // 输出: Charlie is eating. \n The dog is chewing.
}
}
在main方法中,创建了一个Dog对象,然后调用了它的bark和eat方法。在Dog的eat方法中,使用了super关键字来调用父类的eat方法,在输出之前加入了一些额外的内容。
总结起来,super
关键字与父类有关,而this关键字与当前对象有关。它们可以用于不同的目的。
三元表达
在编程中,三元表达式也叫三目运算符,它是一种简化条件判断的表达方式,通常用于简单的if-else语句中。三元表达式的基本语法如下所示:
condition ? value1 : value2
其中,condition
是一个条件表达式,如果结果为true,则返回value1
,否则返回value2
。
下面是一个示例:
int a = 10;
int b = 20;
int max = a > b ? a : b;
在上面的例子中,max
的值将会是20,因为条件表达式 a > b
是false,所以三元表达式返回了 b
。
三元表达式通常用于简单的条件判断语句中,可以用来代替 if-else
语句。例如,在Android中,可以使用三元表达式设置控件的可见性,示例代码如下:
Button button = findViewById(R.id.button);
// 如果一个条件成立,则设置控件为可见,否则设置为不可见
button.setVisibility(condition ? View.VISIBLE : View.INVISIBLE);
三元表达式可以帮助减少代码量,提高代码的可读性和可维护性,但是过度使用会降低代码的可读性,因此,在使用时要注意适当控制。
静态和非静态
静态和非静态是面向对象编程语言中的一个概念,用于描述类成员的特性。
静态(static)是指属于类本身的特性,不是属于任何一个类实例的特性。在 Java 中,静态成员是在类第一次加载时就被创建,而不是在类被实例化时才创建。静态成员常常使用类名.成员名的方式进行访问,而不需要创建类的实例。
非静态(non-static)则是对象特有的,是随着对象的创建而创建的成员,随着对象的销毁而释放。在 Java 中,非静态成员是在类被实例化时创建的,每个类实例都会有自己的非静态成员。非静态成员只能通过对象来访问,而不能通过类名直接访问。