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

java解惑------半斤

阅读更多

问题:给出一个对变量x和i的声明,使得下面这条语句合法:

x += i;

但是下面这条不合法:

x = x + i;

 

许多人会认为第一个表达式只是第二个表达式的简写方式。这并不准确。这两个表达式都被称为赋值表达式。第二个表达式使用的是简单赋值操作符,而第一个表达式使用的是复合赋值操作符。

 

换句话说,复合赋值操作符自动的将所执行的计算的结果转型为其左侧变量的类型。如果结果的类型于改变量的类型相同,那么这个转型不会造成任何影响。然而,如果结果的类型比该变量的类型要宽,那么复合赋值操作符将悄悄地执行一个窄化原生类型转换。因此,我们有很好的理由解释为什么尝试着执行等价的简单赋值可能会产生一个编译错误。

 

为了更具体的说明,并给这个谜题提供一个解决方案,假设我们在该谜题的两个赋值表达式之前有下面的这些声明:

 

short x = 0;

int i = 123456;

 

复合赋值编译将不会产生任何错误:

 

x += i;

 

你可能期望x的值在这条语句执行之后是123456,但是并非如此,它的值是-7616。int类型的数值123456对于short来说太大。自动产生的转型悄悄地吧int数值的高两位截掉了。

 

相应的简单赋值是非法的,因为它试图将int数值赋值给short变量,而这需要显示的转型:

x =  x + i;

 

这应该是明显的,复合赋值表达式可能是危险的。为了避免这种错误,请不要将复合赋值操作符作用于byte,short或char类型的变量。在将复合赋值操作符作用于int变量上,要确保右侧的不是long、float或double类型。在将复合赋值操作符作用于float类型的变量上时候,要确保表达式右侧不是double类型。

分享到:
评论

相关推荐

    java解惑--疑难问题解疑

    本文将针对"java解惑--疑难问题解疑"的主题,对一些常见的Java疑难问题进行详细解析,旨在帮助初学者更好地理解和解决这些问题。 1. **内存管理与垃圾回收**:Java通过自动垃圾回收机制来管理内存,这为开发者减轻...

    java解惑 - Java谜题破解

    探索Java的奥秘,java解惑.pdf

    java解惑--异常地危险

    ### Java解惑——异常地危险 #### 背景与问题描述 在Java开发过程中,开发者经常需要处理多线程编程。随着Java平台的发展和完善,一些早期提供的API由于设计上的考虑不足或者潜在的安全隐患,逐渐被标记为废弃,并...

    Java解惑-java初级知识分析

    主要是java面试中要求的一些细节知识,如表达试等。

    java解惑 - 最后的笑声

    《Java解惑——最后的笑声》这篇博文主要探讨了Java编程中一些常见但往往被忽视的问题,这些问题可能会在开发过程中导致意料之外的错误或性能瓶颈。作为一个专业的IT大师,我将深入解析这些知识点,帮助你更好地理解...

    java解惑-语法细节介绍

    ### Java解惑——语法细节介绍 #### 概述 Java作为一种广泛应用的编程语言,拥有庞大的用户群体和丰富的应用场景。在日常开发过程中,我们往往会遇到一些容易忽视却又十分重要的语法细节。这些细节虽然不起眼,但...

    JAVA解惑-很经典的JAVA书籍

    深刻地分析了JAVA的一些疑难问题,也介绍了JAVA在处理一些特定问题的技巧

    JAVA解惑-Pg285.pdf

    表达式之谜,符号之谜,循环之谜,异常之谜,类之谜,库之谜,各种谜题。

    java 解惑 java 解惑 java 解惑

    java 解惑 java 解惑 java 解惑 java 解惑 java 解惑 java 解惑

    Java解惑(中文版)_java_java解惑_solve65p_

    《Java解惑(中文版)》是一本专为Java初学者设计的学习资料,旨在帮助读者解答在学习Java过程中遇到的各种困惑。"solve65p"可能代表这本书包含65个问题或主题,每个都深入浅出地进行了讲解,旨在解决初学者在编程...

    Java学习利器-JAVA解惑

    然而,学习Java的过程中,初学者或经验丰富的开发者都可能会遇到一些棘手的问题,这就是"Java学习利器-JAVA解惑"想要解决的问题。 这份名为"JAVA解惑"的PDF文档,可能是由一位经验丰富的Java开发者或者教育者编写的...

    最新版的Java-解惑

    《Java解惑》是一本专为Java初学者和进阶者设计的指南,旨在帮助读者解决在学习和实践中遇到的各种问题。这本书深入浅出地解析了Java编程中的常见困惑,涵盖了语言基础、类库应用、多线程、网络编程、异常处理、内存...

    2010年-Java解惑(中文)

    《Java解惑(中文)》是一本专注于解决Java编程中常见问题和困惑的资源集合,旨在帮助初学者和有经验的开发者更好地理解和掌握Java语言。本文将深入探讨Java编程中的关键概念、常见问题以及解决方案。 1. **Java...

    JAVA面试题解惑--经典面试题

    (十)多线程是Java的一大特色,Java提供了Thread类和Runnable接口来创建线程。线程安全、同步机制(synchronized)、volatile关键字、死锁、线程池等都是多线程编程中需要深入理解的概念。 (十一)Java的运算符...

    JAVA 解惑 java经典

    "JAVA解惑"的主题针对的是Java学习过程中遇到的一些常见问题和难点,旨在帮助开发者深入理解和解决这些问题。以下是基于这个主题和描述可能涵盖的一些关键知识点: 1. **Java基础**:这可能包括变量、数据类型、...

    Java解惑 中文版

    《Java解惑中文版》是一本专为Java程序员设计的指南,旨在帮助读者解决在编程过程中遇到的各种问题,提升程序的健壮性。本书深入浅出地探讨了Java语言的核心概念、常见疑惑以及最佳实践,旨在使开发者能够编写出更...

    Java PUZZLE Java 解惑

    Java PUZZLE Java 解惑 Java PUZZLE Java 解惑 Java PUZZLE Java 解惑Java PUZZLE Java 解惑 Java PUZZLE Java 解惑 Java PUZZLE Java 解惑

Global site tag (gtag.js) - Google Analytics