欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

44.赋值运算符

程序员文章站 2022-04-29 12:47:17
...

我们在前面的学习中,其实已经在很多的地方都用到了赋值运算符。赋值运算符“=”将“=”右边的值赋给(更准确说是“复制到”)左边的变量。

 

“=”右边的值可以是任何的变量、常量或者一个可以产生值的表达式,而“=”的左边必须是一个明确的、命名的变量,但不可以为常量,如i = 100是合法的,而100 = i 却是不允许的。


对于基本数据类型的赋值,它非常的简单,它直接将“=”右边的值复制到左边的变量中;对于引用数据类型的赋值,操作的并非是对象本身,而是它的“对象引用”,它实际上是将“=”右边的引用(而非对象本身)复制到左边的变量中。

 

下面以一个示例来进一步说明。

 

public class Assignment {
 public static void main(String[] args) {
  // 简单数据类型
  int a, b = 100;
  a = b;
  b = 20;
  System.out.println("a = " + a);
  System.out.println("b= " + b);

  Person p1 = new Person(100);
  Person p2;
  p2 = p1;
  p1.setPersonId(111);
  System.out.println("p1的PersonId=" + p1.getPersonId());
  System.out.println("p2的PersonId=" + p2.getPersonId());
 }

}

class Person {
 private int personId;

 // 构造器
 public Person(int id) {
  personId = id;
 }

 public int getPersonId() {
  return personId;
 }

 public void setPersonId(int id) {
  personId = id;
 }
}

在这个示例中,我们定义了一个类“Person”,它有一个“personId”的属性。在类“Assignment”的main()方法中,我们定义了两个int简单数据类型的变量a、b,并给b赋值100,然后将b的值赋给变量a,此时实际上是将b的值的一个“副本”拷贝给了a,因此,a和b中任何一方的变化,都不会影响到另一方;

 

另外,我们还定义了两个Person引用类型的变量p1、p2,并给p1初始化了一个对象引用,然后,将p1的值赋给p2,此时,这个操作实际上是将p1的对象引用复制给了p2,此时,p1和p2所指向的是同一个对象!因此,无论通过变量p1还是p2去改变对象,都是改变的同一个对象。

编译并运行上面的类“Assignment”,将得到如下的输出:
a = 100
b= 20
p1的PersonId=111
p2的PersonId=111

 

将赋值运算符和其他的运算符结合起来,就可以作为一种特别的“扩展”赋值运算符。扩展赋值运算符有如下这些:+=,-=,*=,/=,%=,&=,|=,^=,>>=,<<=,>>>=等。

 

注意,并非所有的运算符都可以和赋值运算符结合成扩展赋值运算符。


扩展赋值运算符的引入只是为了简化赋值运算的表达形式,将“a=a operator b;”简化为“ a operator=b;”,其作用是相同的。