知识大全 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

相关参考

知识大全 关于url地址传参数时字符串有回车造成页面脚本赋值失败的解决方法

  在通过url地址接受参数的时候有些参数的值V带有回车%A这时候在页面脚本显示的时候把这个值V付给脚本变量可能会造成脚本的错误  所以相应的一开始在传值的时候对一些字符串进行url编码在脚本赋值的时

知识大全 Java变量类型之间的相互转换

Java进阶:Java变量类型之间的相互转换  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  我们

知识大全 Java变量的自动递增和递减

Java变量的自动递增和递减  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  和C类似Java提供

知识大全 Java环境变量定制应用部署

Java环境变量定制应用部署  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  有时当我们编写JEE

知识大全 Java并发编程实践之ThreadLocal变量

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

知识大全 Java变量类型间的相互转换

Java变量类型间的相互转换  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!      我们知道Ja

知识大全 Java反射访问私有变量和私有方法

Java反射访问私有变量和私有方法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  引言  对于软

知识大全 java和ant在windows下的环境变量的配置方法

  以下设置WinXP及以上用户右键点击我的电脑>属性>高级>环境变量设置即可设置完成后需重新启动命令提示符才能生效具体如下  JAVA环境变量设置  Windows下JAVA用到的

知识大全 Java理论与实践: 正确使用Volatile变量

Java理论与实践:正确使用Volatile变量  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  

知识大全 Java设置JS脚本中的变量

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