JAVA基础(部分)-------自己的整理(持续更新)

本文详细比较了Java中的int和Integer数据类型、内存存储差异,以及String和StringBuffer的区别,介绍了super关键字、三元表达式和静态/非静态成员的使用。
摘要由CSDN通过智能技术生成

intInteger 的区别

  • 数据类型不同int 是基础数据类型,而 Integer 是包装数据类型;

  • 默认值不同: int 的默认值是 0,而 Integer 的默认值是 null

  • 内存中存储的方式不同: int 在内存中直接存储的是数据值,而 Integer 实际存储的是对象引用,当 new 一个 Integer 时实际上是生成一个指针指向此对象;

  • 内存中存储的方式不同: int 在内存中直接存储的是数据值,而 Integer 实际存储的是对象引用,当 new 一个 Integer 时实际上是生成一个指针指向此对象;

  • 变量的比较方式不同:int 可以使用 ==来对比两个变量是否相等,而 Integer 一定要使用 equals 来比较两个变量是否相等

变量之间的比较

  1. 两个new Integer()变量比较,永远是false
    原因:因为new生成的是两个对象,其内存地址不同

  1. Integer变量 和 new Integer() 变量比较 ,永远为 false
    原因:因为 Integer变量 指向的是java常量池中的对象,而 new Integer() 的变量指向堆中新建的对象,两者在内存中的地址不同。

  1. 两个Integer 变量比较,如果两个变量的值在区间==-128到127== 之间,则比较结果为true,如果两个变量的值不在此区间,则比较结果为 false。
    原因:Java对于-128到127之间的数,会进行缓存。
    所以 Integer i = 127 时,会将127进行缓存,下次再写Integer j = 127时,就会直接从缓存中取,就不会new了。

  1. int变量与 Integer、new Integer()比较时,只要两个的值是相等的,则为true.

String和StringBuffer的区别

String:

  1. String创建的对象是不可变的,一旦创建不可改变
  2. 对象值可以改变其实是创建了一个新的对象,然后把新的值保存进去
  3. String类被final修饰,不可以被继承
  4. String创建的对象的值存在于常量池,不用的时候不会被销毁
  5. String运行时间较长
  6. String适用于比较短而小的字符串

![[Pasted image 20230513182656.png]]


StringBuffer:

  1. StringBuffer创建的对象是可变的
  2. 它的改变不像String那样重新创建对象,而是通过构造方法(如图)
  3. StringBuffer创建的对象的值存在于栈区,不用的时候会被销毁
  4. StringBuffer运行时间较短
  5. StringBuffer适用于比较长的字符串、比较多的字符串

![[Pasted image 20230513182735.png]]

在线程安全上,StringBuffer的所有方法都是同步的,因此多个线程同时访问一个StringBuffer对象时,不会出现数据不一致的情况。这使得StringBuffer非常适合用于多线程编程。

StringBuffer适用于在多线程环境下进行大量字符串操作,或者在单线程环境下进行复杂的字符串操作的场景。


super

在Java中,superthis都是关键字,用于操作类的属性和方法。它们之间的区别如下:

  • 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 中,非静态成员是在类被实例化时创建的,每个类实例都会有自己的非静态成员。非静态成员只能通过对象来访问,而不能通过类名直接访问。## intInteger 的区别

  • 数据类型不同int 是基础数据类型,而 Integer 是包装数据类型;

  • 默认值不同: int 的默认值是 0,而 Integer 的默认值是 null

  • 内存中存储的方式不同: int 在内存中直接存储的是数据值,而 Integer 实际存储的是对象引用,当 new 一个 Integer 时实际上是生成一个指针指向此对象;

  • 内存中存储的方式不同: int 在内存中直接存储的是数据值,而 Integer 实际存储的是对象引用,当 new 一个 Integer 时实际上是生成一个指针指向此对象;

  • 变量的比较方式不同:int 可以使用 ==来对比两个变量是否相等,而 Integer 一定要使用 equals 来比较两个变量是否相等

变量之间的比较

  1. 两个new Integer()变量比较,永远是false
    原因:因为new生成的是两个对象,其内存地址不同

  1. Integer变量 和 new Integer() 变量比较 ,永远为 false
    原因:因为 Integer变量 指向的是java常量池中的对象,而 new Integer() 的变量指向堆中新建的对象,两者在内存中的地址不同。

  1. 两个Integer 变量比较,如果两个变量的值在区间==-128到127== 之间,则比较结果为true,如果两个变量的值不在此区间,则比较结果为 false。
    原因:Java对于-128到127之间的数,会进行缓存。
    所以 Integer i = 127 时,会将127进行缓存,下次再写Integer j = 127时,就会直接从缓存中取,就不会new了。

  1. int变量与 Integer、new Integer()比较时,只要两个的值是相等的,则为true.

String和StringBuffer的区别

String:

  1. String创建的对象是不可变的,一旦创建不可改变
  2. 对象值可以改变其实是创建了一个新的对象,然后把新的值保存进去
  3. String类被final修饰,不可以被继承
  4. String创建的对象的值存在于常量池,不用的时候不会被销毁
  5. String运行时间较长
  6. String适用于比较短而小的字符串

![[Pasted image 20230513182656.png]]


StringBuffer:

  1. StringBuffer创建的对象是可变的
  2. 它的改变不像String那样重新创建对象,而是通过构造方法(如图)
  3. StringBuffer创建的对象的值存在于栈区,不用的时候会被销毁
  4. StringBuffer运行时间较短
  5. StringBuffer适用于比较长的字符串、比较多的字符串

在线程安全上,StringBuffer的所有方法都是同步的,因此多个线程同时访问一个StringBuffer对象时,不会出现数据不一致的情况。这使得StringBuffer非常适合用于多线程编程。

StringBuffer适用于在多线程环境下进行大量字符串操作,或者在单线程环境下进行复杂的字符串操作的场景。


super

在Java中,superthis都是关键字,用于操作类的属性和方法。它们之间的区别如下:

  • 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 中,非静态成员是在类被实例化时创建的,每个类实例都会有自己的非静态成员。非静态成员只能通过对象来访问,而不能通过类名直接访问。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值