Java a = a + b 与 a += b 的区别问题的解决和语言基础学习

206 阅读6分钟

变量

1. 变量的三个元素

变量的三个元素:变量类型、变量名和变量值。

2. 变量声明

格式:数据类型 变量名;

int n;
long count;

3. 变量赋值

格式:数据类型 变量名=变量值;使用“ =”运算符进行赋值“= ” 叫作赋值运算符,将运算符右边的值赋给左边的变量。

int n;
n = 3;
int n = 3

4. 变量类型

Java 中主要有如下几种类型的变量 局部变量 类变量(静态变量) 成员变量(非静态变量)

常量

使用 final 关键字来定义一个常量1//final dataType variableName = value2public static final double PI = 3.14;

//final dataType variableName = value2public static final double PI = 3.14;

注意:在定义常量时就需要对该常量进行初始化。final 关键字不仅可以用来修饰基本数据类型的常量,还可以用来修饰对象的引用或者方法。为了与变量区别,常量取名一般都用大写字符。当常量被设定后,一般情况下不允许再进行修改。

1. 常量类型

三种类型: 静态常量 成员常量 局部常量


1public class HelloWorld {
   public static final double PI = 3.14;
   final int y = 10;
   public static void main(String[] args) {
   final double x = 3.3;9    }
   }

方法

所谓方法,就是用来解决一类问题的代码的有序组合,是一个功能模块。方法是Java程序的核心组成部分之一,它用于封装可重用的代码块,并通过方法名进行调用。下面是关于Java中方法的一些重要概念和使用方法。

1. 方法的声明:

  • 方法由访问修饰符、返回类型、方法名和参数列表组成。
  • 访问修饰符控制方法的访问级别,可以是public、protected、private或默认的(没有指定访问修饰符)。
  • 返回类型指定方法返回值的类型,可以是基本数据类型、引用类型或void(表示没有返回值)。
  • 方法名是用于调用方法的标识符,要符合标识符的命名规则。
  • 参数列表指定方法接收的输入参数,可以有零个或多个,多个参数之间用逗号分隔。
修饰符 返回值类型 方法名(参数类型 参数名){
   ...
   方法体
   ...
   return 返回值;
   }

image.png

2. 方法的调用:

  • 在代码中调用方法时,需要使用方法名和适当的参数。
  • 方法的调用可通过对象名、类名或super关键字进行。
  • 若方法被声明为静态方法,则可以使用类名直接调用;否则需要通过对象名调用。

3. 方法的重载:

  • Java支持方法的重载,即在同一个类中可以定义多个同名的方法,但它们的参数列表或返回类型不同。
  • 重载的方法根据不同的参数列表来识别和区分。

4. 方法的返回值:

  • 方法可以有返回值,也可以没有返回值。
  • 有返回值的方法需使用与返回类型相匹配的return语句返回一个值。
  • 若方法声明为void类型,则表示没有返回值,在方法体内可以省略return语句。

一些方法的示例:

// 有返回值的方法示例
public class Calculator {
    public static int add(int num1, int num2) {
        return num1 + num2;
    }
    
    public static double divide(double numerator, double denominator) {
        return numerator / denominator;
    }
}

// 无返回值的方法示例
public class Printer {
    public void printMessage(String message) {
        System.out.println(message);
    }
    
    public void printNumbers(int n) {
        for (int i = 1; i <= n; i++) {
            System.out.print(i + " ");
        }
    }
}

在上面的示例中,Calculator类包含两个静态方法:add方法和divide方法,分别用于进行整数相加和浮点数相除的运算。Printer类包含两个实例方法:printMessage方法和printNumbers方法,分别用于打印字符串和连续输出一定范围的数字。

衍生问题

a = a + b 与 a += b 的区别

在Java中,a = a + ba += b这两种语法看起来很相似,但它们有一些细微的差别。

  1. a = a + b

    • 这是一个简单的赋值语句,将a + b的结果赋值给变量a。
    • 在执行这个语句之前,会先计算a + b的结果,然后将结果赋值给a。
    • 例如,如果a是一个整数变量,b是一个整数常量,那么a = a + b相当于将a与b相加的结果赋值给a。
  2. a += b

    • 这是一个复合赋值运算符,结合了加法运算和赋值运算。
    • 它相当于a = a + b,但是更加简洁和方便。
    • 不同的是,a += b的计算结果直接赋值给a,不需要进行额外的赋值操作。
    • 当使用复合赋值运算符时,Java会自动进行类型转换,确保结果符合变量的类型。

区别总结:

  • 语法形式上的区别:一种是简单赋值语句a = a + b,另一种是复合赋值运算符a += b
  • 执行顺序上的区别:a = a + b先计算a + b的结果,然后再执行赋值操作;a += b一次性完成加法和赋值操作。
  • 类型转换上的区别:a += b会自动进行类型转换,确保结果符合变量的类型。

需要注意:

  • 对于基本数据类型,a = a + ba += b没有本质差别,两种方式可以互换使用。
  • 对于对象引用类型,复合赋值运算符可能会有特殊的行为,需要根据具体情况来判断是否适用。

综上所述,a = a + ba += b在大多数情况下是等效的,但在某些特殊的场景中,如对象引用类型,可能会有微小差别。

类的修饰符能不能不写?

在Java中,类的修饰符是可选的,也就是说可以选择不写类的修饰符。如果不写修饰符,则类会使用默认的访问修饰符,也称为默认修饰符或包级访问修饰符。

默认的访问修饰符允许类在同一个包内被访问。这意味着,如果一个类没有显式地指定访问修饰符,那么它只能在相同的包中被其他类访问,而在不同的包中是无法访问的。

当然,你也可以显式地指定类的修饰符,例如使用"public"使得类对于所有类可见,或是使用"private"使得类只能在同一个类中访问。具体的类修饰符包括以下几种:

  • public:对所有类可见,无访问限制。
  • protected:对于同一个包中的类和所有子类可见。
  • private:只对同一个类中可见,其他类无法访问。
  • 默认(包级访问修饰符):对同一个包中的类可见。

在选择类的修饰符时,需要根据实际需求来进行决策。如果希望类能够被其他类广泛访问和使用,可以选择使用"public"修饰符。如果希望限制类的访问范围,可以使用较为限制性的修饰符,如"protected"或"private"。否则,使用默认的访问修饰符即可。

需要注意的是,在一个Java源文件中,最多只能有一个使用public修饰的类,并且该类的类名要与文件名相同。其他非public的类可以有多个,并且类名与文件名可以不一致。