`
liuwei1981
  • 浏览: 756797 次
  • 性别: Icon_minigender_1
  • 来自: 太原
博客专栏
F8258633-f7e0-30b8-bd3a-a0836a5f4de5
Java编程Step-by...
浏览量:157234
社区版块
存档分类
最新评论

44.赋值运算符

 
阅读更多

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

 

“=”右边的值可以是任何的变量、常量或者一个可以产生值的表达式,而“=”的左边必须是一个明确的、命名的变量,但不可以为常量,如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;”,其作用是相同的。

 

分享到:
评论

相关推荐

    C#教程(语言规范)

    7.17 赋值运算符 ... 197 7.17.1 简单赋值 198 7.17.2 复合赋值 200 7.17.3 事件赋值 201 7.18 表达式 .. 201 7.19 常量表达式 ... 201 7.20 布尔表达式 ... 202 8. 语句 .. 204 8.1 结束点和可到达性 204 ...

    Solaris 动态跟踪指南

    赋值运算符.......................................................................................................................................... 50 递增和递减运算符 ..................................

    c#3.0语言规范高清PDF

    1.6.7.5 运算符 .......................................................................................................................................... 23 1.6.7.6 析构函数 .............................

    高质量C_C++编程指南

    第 1 章 文件结构 ...8.4 运算符重载............................................................................................................... 64 8.5 函数内联 ........................................

    高质量c++编程

    4.1 运算符的优先级..................................................................................................... 26 4.2 复合表达式.................................................................

    JavaScript实用范例词典01

    1.9 算术赋值运算符... 8 1.10 三元运算符(条件运算符) 9 1.11 检查变量是否存在... 10 1.12 表达式的计算顺序... 11 1.13 条件选取(if) 12 1.14 多条件的选取if 13 1.15 双重选取(if) 14 1.16 多重选取if 15...

    C++良好的编程风格.pdf

    4.1 运算符的优先级.......................................................................................................26 4.2 复合表达式 ...............................................................

    C语言教程,大学教材,Turbo C2.0 基础学习

    …............44 2.2.4 程序运行与调试..................................….....................................…............46 2.2.5 Turbo C环境设置..............................….......................

    PHP 4 MySQL 完全实例教程

    5.2.1 算术运算符.............................................................................................................. 54 5.2.2 字符串运算.........................................................

    高质量C/C++编程(高清扫描版)

    4.1 运算符的优先级....................................................................................................... 26 4.2 复合表达式................................................................

    微软 C#语言参考 CHM格式

    7.13 赋值运算符... 136 7.13.1 简单赋值... 136 7.13.2 组合赋值... 138 7.13.3 事件赋值... 139 7.14 表达式... 139 7.15 常量表达式... 139 7.16 布尔表达式... 140 8. 语句... 141 8.1 终点与可达性... 141 8.2 ...

    高质量C++编程指南

    4.1 运算符的优先级....................................................................................................... 26 4.2 复合表达式................................................................

    高质量C _C编程指南

    4.1 运算符的优先级.................................. 26 4.2 复合表达式........................................ 27 4.3 IF 语句................................................ 27 4.4 循环语句的效率........

    C++STL程序员开发指南【可搜索+可编辑】

    1-3-1 类的构造函数、析构函数与赋值函数,..... - ........ - .............. 19 1-3-2 在派生类中实现类的基本函数,................... _ ............... 29 1-3-3 内联函数技术,........ ..............

    MATLAB使用教程

    赋值运算符...........................................................................................................4 基本数学定义式......................................................................

    高质量C++C 编程指南

    4.1 运算符的优先级 ..................................................................................................... 26 4.2 复合表达式.................................................................

    高质量C++/C编程指南

    4.1 运算符的优先级... 26 4.2 复合表达式... 27 4.3 if 语句... 27 4.4 循环语句的效率... 29 4.5 for 语句的循环控制变量... 30 4.6 switch语句... 30 4.7 goto语句... 31 第5章 常量... 33 5.1 为什么需要常量......

    Lua中文教程(pdf版)

    3.1 算术运算符...............13 3.2 关系运算符...............13 3.3 逻辑运算符...............13 3.4 连接运算符...............14 3.5 优先级.....15 3.6表的构造..15 第4章基本语法................18 ...

Global site tag (gtag.js) - Google Analytics