知识大全 Java变量的赋值

Posted

篇首语:不要什么话都跟别人讲,你说的是心里话,他们听的是笑话。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Java变量的赋值相关的知识,希望对你有一定的参考价值。

Java变量的赋值  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  赋值是用等号运算符(=)进行的 它的意思是 取得右边的值 把它复制到左边 右边的值可以是任何常数 变量或者表达式 只要能产生一个值就行 但左边的值必须是一个明确的 已命名的变量 也就是说 它必须有一个物理性的空间来保存右边的值 举个例子来说 可将一个常数赋给一个变量(A= ;) 但不可将任何东西赋给一个常数(比如不能 =A)   对主数据类型的赋值是非常直接的 由于主类型容纳了实际的值 而且并非指向一个对象的句柄 所以在为其赋值的时候 可将来自一个地方的内容复制到另一个地方 例如 假设为主类型使用 A=B 那么B处的内容就复制到A 若接着又修改了A 那么B根本不会受这种修改的影响 作为一名程序员 这应成为自己的常识   但在为对象 赋值 的时候 情况却发生了变化 对一个对象进行操作时 我们真正操作的是它的句柄 所以倘若 从一个对象到另一个对象 赋值 实际就是将句柄从一个地方复制到另一个地方 这意味着假若为对象使用 C=D 那么C和D最终都会指向最初只有D才指向的那个对象 下面这个例子将向大家阐示这一点   这里有一些题外话 在后面 大家在代码示例里看到的第一个语句将是 package 使用的 package 语句 它代表本书第 章 本书每一章的第一个代码清单都会包含象这样的一个 package (封装 打包 包裹)语句 它的作用是为那一章剩余的代码建立章节编号 在第 章 大家会看到第 章的所有代码清单(除那些有不同封装名称的以外)都会自动置入一个名为c 的子目录里 第 章的代码置入c 以此类推 所有这些都是通过第 章展示的CodePackage java程序实现的 封装 的基本概念会在第 章进行详尽的解释 就目前来说 大家只需记住象 package 这样的形式只是用于为某一章的代码清单建立相应的子目录   为运行程序 必须保证在classpath里包含了我们安装本书源码文件的根目录(那个目录里包含了c c c c 等等子目录)   对于Java后续的版本( 和更高版本) 如果您的main()用package语句封装到一个文件里 那么必须在程序名前面指定完整的包裹名称 否则不能运行程序 在这种情况下 命令行是   java c Assignment  运行位于一个 包裹 里的程序时 随时都要注意这方面的问题   下面是例子         //: Assignment java  // Assignment with objects is a bit tricky  package c ;    class Number    int i;      public class Assignment    public static void main(String[] args)     Number n = new Number();    Number n = new Number();    n i = ;    n i = ;    System out println( : n i: + n i +      n i: + n i);    n = n ;    System out println( : n i: + n i +      n i: + n i);    n i = ;    System out println( : n i: + n i +      n i: + n i);      ///:~    Number类非常简单 它的两个实例(n 和n )是在main()里创建的 每个Number中的i值都赋予了一个不同的值 随后 将n 赋给n 而且n 发生改变 在许多程序设计语言中 我们都希望n 和n 任何时候都相互独立 但由于我们已赋予了一个句柄 所以下面才是真实的输出    : n i: n i:    : n i: n i:    : n i: n i:   看来改变n 的同时也改变了n !这是由于无论n 还是n 都包含了相同的句柄 它指向相同的对象(最初的句柄位于n 内部 指向容纳了值 的一个对象 在赋值过程中 那个句柄实际已经丢失 它的对象会由 垃圾收集器 自动清除)   这种特殊的现象通常也叫作 别名 是Java操作对象的一种基本方式 但假若不愿意在这种情况下出现别名 又该怎么操作呢?可放弃赋值 并写入下述代码   n i = n i;  这样便可保留两个独立的对象 而不是将n 和n 绑定到相同的对象 但您很快就会意识到 这样做会使对象内部的字段处理发生混乱 并与标准的面向对象设计准则相悖 由于这并非一个简单的话题 所以留待第 章详细论述 那一章是专门讨论别名的 其时 大家也会注意到对象的赋值会产生一些令人震惊的效果      方法调用中的别名处理  将一个对象传递到方法内部时 也会产生别名现象       //: PassObject java  // Passing objects to methods can be a bit tricky    class Letter    char c;      public class PassObject    static void f(Letter y)     y c = z ;      public static void main(String[] args)     Letter x = new Letter();    x c = a ;    System out println( : x c: + x c);    f(x);    System out println( : x c: + x c);      ///:~    在许多程序设计语言中 f()方法表面上似乎要在方法的作用域内制作自己的自变量Letter y的一个副本 但同样地 实际传递的是一个句柄 所以下面这个程序行   y c = z ;  实际改变的是f()之外的对象 输出结果如下    : x c: a   : x c: z  别名和它的对策是非常复杂的一个问题 尽管必须等至第 章才可获得所有答案 但从现在开始就应加以重视 以便提早发现它的缺点 cha138/Article/program/Java/JSP/201311/19494

相关参考