題目在這裡:question:關於c#連續賦值的面試題
在msdn中,對=號操作符的說明如下:
賦值運算子 ( =) 將右運算元的值儲存在左運算元表示的儲存位置、屬性或索引器中,並將值作為結果返回。
運算元的型別必須相同(即右運算元必須可以隱式轉換為左運算元的型別)。
首先來看
int x,y,z;x = y = z = 1;
1:z=1,將1賦值給z,接著返回1,
2:y=(z=1),將返回的1賦值給y,並返回1,
3:x=(y=(z=1)),將表示式2的結果1賦值給x。
接著看第一道題:
constint x=1;
short y;
object z;
z=y=x;
首先要說明的是x是const,因為const是編譯時常量,所以
z=y=x;在編譯的時候就會變成z=y=1。
1:y=1,因為y是short,所以1被轉換為short,所以返回值為1(short);
2:將y=1返回的結果,也就是1(short)賦值給z,所以z是1(short)裝箱後的物件,
gettype返回system.int16.
值得一提的是,如果你將上面的const int x=1中的const去掉,**如下:
int x=1;short y;
object z;
z=y=x;
因為x是int32,y是int16,因為int32無法隱式轉換成int16.所以這段**無法通過編譯:
接著考慮第二題:
class cset }}
staticvoid main()
關鍵就是分析:z=c.x=null;
1:c.x=null;呼叫c的setx方法,設定x=null,並且將null作為值返回。
2:z=(c.x=null);因為c.x=null,返回了null,所以將null賦值給z,z此時為null;
3:console.writeline(z==null),返回true;
4:console.writeline(c.x==null),呼叫c的getx方法,方法返回」」,所以c.x==null,返回false。
你都做對了嗎?
Answer 關於C 連續賦值的面試題
question 關於c 連續賦值的面試題在msdn中,對 號操作符的說明如下 賦值運算子 將右運算元的值儲存在左運算元表示的儲存位置 屬性或索引器中,運算元的型別必須相同 即右運算元必須可以隱式轉換為左運算元的型別 int x,y,z x y z 1 1 z 1,將1賦值給z,接著返回1,2 y ...
關於python連續賦值的需要注意的地方
最近開始刷leetcode,順便學習一下py node結構如下 class node object def init self val,next none self.value val self.next next 然後刷到第二題的時候,看到別人的 中一行 比較有意思 n.next n node v...
Java連續賦值操作的細節
對於乙個連等型的表示式,其在不同位置相同的變數,會因為變數賦值順序的不同,影響變數的值是否賦值 成功,如下 public class test 這段 的結果是 03 雖然 表示式的運算順序是從右向左,但是變數在運算前 已經被從左至右讀入cpu,所以,對於第一部分 第乙個a的值為0,第二個a值為 1 ...