1. 程式人生 > >Java中x+=y和x=x+y兩種實現的區別

Java中x+=y和x=x+y兩種實現的區別

先看下邊兩段程式碼,各有什麼錯?

例一:

short s1 = 1; 
s1 = s1 + 1;

例二:

short s1 = 1; 
s1 += 1;

第一段程式碼無法通過編譯,由於 s1+1 在運算時會自動提升表示式的型別至 int 型,再賦值給 short 型別的 s1 時將發生強制型別轉換的錯誤。

第二段程式碼卻能夠正確編譯。

這兩種實現方式有什麼不同嗎?

答案是:

雖然 x+=y 和 x=x+y 兩個表示式在一般情況下可以通用,但是在 Java 環境中執行時存在一些細微的差別。這差別在於, += 除了實現 + 功能外,還會根據接收變數的型別自動進行型別的強制轉換。

相關推薦

java面試題:java的單例設計模式及實現方法的程式碼舉例

java面試時經常會問到關於單例設計模式,因為它能考察的知識點較多且在開發中經常用到。那我就來說一說我對於單例設計模式的一些淺見。首先,在Java中,什麼是單例呢?就是保證類在記憶體中只有一個物件。那麼

JAVA使用springBootEhcache3.X無xml配置xml配置

我用的是springBoot和Ehcache3.31.在maven的pom.xml匯入ehcache3.3.0依賴<!-- Ehcache 快取--> <dependency> <groupId>org.ehcache</gr

JAVA值傳遞引用傳遞的三情況

前言 我們都知道,java中資料型別分為基本資料型別和引用資料型別。 基本資料型別 整型:byte,short,int,long 浮點型:float,double 字元型:char 布林型:boolean 引用資料型別 陣列 類 介面 方法的引數

c++建構函式成員初始化賦值初始化列表方式的區別

先總結下: 由於類成員初始化總在建構函式執行之前 1)從必要性:      a. 成員是類或結構,且建構函式帶引數:成員初始化時無法呼叫預設(無參)建構函式      b. 成員是常量或引用:成員無法賦值,只能被初始化 2)從效率上:     如果在類建構函式裡賦值:在成員

java關於給屬性賦值的方法

兩種方法說明   對於一個類中的成員變數(屬性),如果都被設定成了private私有資料型別,則對外給屬性設定了get和set方法 ,      外部程式中給這些屬性設定值,有兩種方式.    

二叉樹的高度 java 利用遞迴層次遍歷方法

原文:http://blog.csdn.net/fangchao3652/article/details/53456468 ackage edu.lnu.fang.BiTree; import java.util.ArrayList; import java.util.L

Java按位元組獲得字串長度的方法

本文為原創,如需轉載,請註明作者和出處,謝謝! 由於Java是基於Unicode編碼的,因此,一個漢字的長度為1,而不是2。但有時需要以位元組單位獲得字串的長度。例如,“123abc長城”按位元組長度計算是10,而按Unicode計算長度是8。為了獲得10,需要從頭掃描根據

mysqlSELECT INTO INSERT INTO SELECT 表複製語句

1.INSERT INTO SELECT語句       語句形式為:Insert into Table2(field1,field2,...) select value1,value2,... from Table1       要求目標表Table2必須存在,由於

Java多個視窗間呼叫的方式

Eclipse中的WindowBuilder外掛很適合用在小型程式的使用者介面開發上,這種直觀快速的方法不僅易於操作,而且還能在一定程度上提高效率。 標題中的“兩種方式”,實際上指的就是視窗間呼叫的:1.純程式碼實現方式,和2.WindowBuilder外掛實現方式。

微信小程式下拉載入上拉重新整理實現方法

方法一:onPullDownRefresh和onReachBottom方法實現小程式下拉載入和上拉重新整理 首先要在json檔案裡設定window屬性             屬性  

PHP查詢資料庫滿足條件的記錄條數(實現方法)

第一種方法:查詢時候直接統計  複製程式碼 程式碼如下: $sql="SELECT COUNT(*) AS count FROM TABLE WHERE id='$id'";  $result=mysql_fetch_array(mysql_query($sql));  $count=$result['cou

多執行緒實現區別-繼承Thread實現Runable

一  前面一種比較簡潔。後面一種更靈活,因為java可以實現多個介面,但是隻能繼承一個類 二  適合於資源的共享 如果不涉及 多執行緒直接資源共享用Thread 比較好,否則實現Runable較好 Thread其實也是實現了Runnable介面  Thread中的start(

Java判斷單鏈表是否有環的實現方法

http://blog.jobbole.com/106227/ 方法一:首先從頭節點開始,依次遍歷單鏈表的每一個節點。每遍歷到一個新節點,就從頭節點重新遍歷新節點之前的所有節點,用新節點ID和此節點之前所有節點ID依次作比較。如果發現新節點之前的所有節點當中存

Java設計模式之觀察者模式的實現

     觀察者模式就是定義物件之間的一對多依賴,這樣一來,當一個物件狀態發生改變時,它的所有依賴者都會收到通知並自動更新。  這樣的好處就是兩個或多個物件之間鬆耦合,它們依然可以互動,但不太清楚彼此的細節。觀察者模式提供了一種物件的設計,讓主題和觀察者之間鬆耦合。鬆耦合的設

Javax+=yx=x+y實現區別

先看下邊兩段程式碼,各有什麼錯? 例一: short s1 = 1; s1 = s1 + 1; 例二: short s1 = 1; s1 += 1; 第一段程式碼無法通過編譯,由於 s1+1 在運算時會自動提升表示式的型別至 int 型,再賦值給 short 型別的 s1

python的print(x, end=)print(x, sep=)

拼接 \n 打印 code 默認打印 輸出 col clas range print(x, end=) for i in range(10): print(i) 輸出結果: 0 1 2 3 4 5 6 7 8 9 for i in range(10):

1/X+1/Y=1/N!的O(n)做法

題目大意: 求1/X+1/Y=1/N!的答案對數。 解題思路1: 設 m=n! ,由等式知x,y必定大於n!,所以再設 x=n!+k=m+k 帶入 1/m=1/x+1/y 中化簡得到y=m*m/k+

自定義的類建立的物件使用len(x)函式abs(x)函式

class Mylist: '''自定義的容器類,內部使用內建的列表儲存資料''' def __init__(self, iterable): self.data = [x for x in iterable] def __repr__(self): return "Mylist(%s)" % self.

Hadoop1.x版本Hadoop2.x版本架構原理

MapReduce 1.x 架構 MapReduce 1.x 採用 Master/Slave 架構,由全域性唯一的 Jobtracker 和多個 TaskTacker 組成,並且在Client中提供一系列的api供程式設計和管理使用。 1.client 提供a

概率論:p(x|theta)p(x;theta)的區別

求解最大似然估計時發現有兩種表示方法   from:Gregor Heinrich - Parameter estimation for text analysis from:http://blog.csdn.net/pipisorry/article/detail