C# 操作符之二 算數(shù)操作符
public class MathOps{
public static void main(String [] args){
Random rand=new Random(47);
int i,j,k;
j=rand.nextInf(100)+1;
System.out.println("j:"+j);
k=rand.nextInt(100)+1;
System.out.println("k:"+k);
i=j-k;
System.out.println("j-k:"+i);
i=k/j;
System.out.println("k/j:"+i);
i=k*j;
System.out.println("k*j:"+i);
j%=k;
System.out.println("i%=k:"+j);
float u,v,w;
v=rand.nextFloat();
System.out.println("v:"+v);
w=rand.nextFloat();
System.out.println("w:"+w);
u=v+w;
System.out.printlln("v+w:"+u);
u=v-w;
System.out.println("v-w:"+u);
u=v*w;
System.out,print("v*w"+u);
u=v/w;
System.out.print("v/w:"+u);
u+=v;
System.out.print("u+=v:"+u);
u-=v;
System.out.print("u-=v:"+u);
u*=v;
System.out.print("u*=v:"+u);
u/=v;
System.out.print("u/=v:"+u);
}
}
輸出:
j:59;
k:56;
j+k:115;
j-k:3;
k/j:0;
k*j:3304;
k%j:56;
j%=k:3;
v:0.5309454;
w:0.0534122
v+w:0.5843576
v-w:0.47753322
v*w:0.028358962
v/w:9.94025
u+=v:10.471473
u-=v:9.940527
u*=v:5.2778773
u/=v:9.940527
通過Random類的對象,程序可以生成許多不同類型的隨機數(shù)字。做法很簡單,只需要調用方法nextInt()和nextFloat()即可(或nextLong()或者nextDouble())。傳遞給nextInt()的參數(shù)設置了所產(chǎn)生的隨機數(shù)的上限,而其下線為0,但是這個下線并不是我們想要的,因為他會產(chǎn)生除0的可能性,所以做了+1的操作。
一元操作符中編譯器會自動判斷+,-號的作用
比如:x=a*-b;編譯器可以編譯其含義b前-號是負號但為了避免讀者混淆最佳的寫法是
x=a*(-b)
一元減號用于轉變數(shù)據(jù)的符號,而一元加號只是為了與一元減號相對應,但是它唯一的作用僅僅是將較小類型的操作數(shù)提升為int;
算術操作符
Operator |
Use |
Description |
+ |
op1 + op2 |
返回op1和op2的和 |
- |
op1 - op2 |
返回op1和op2的差 |
* |
op1 * op2 |
返回op1和op2的積 |
/ |
op1 / op2 |
返回op1除以op2的商 |
% |
op1 % op2 |
返回op1除以 op2的余數(shù) |
Java中提供的打量快捷運算中遞增和遞減運算時兩種相當不錯又快捷的運算(通常被稱為"自動遞增"和"自動遞減"運算)。其中,遞減操作符是"--",意私事減少一個單位,遞增是"++"意思是增加一個單位
++a等價于a=a+1遞減亦同
遞增,遞減又分為"前綴式"和"后綴式"。
對于前綴式:++a,--a,會先執(zhí)行運算,再生成值。而對于后綴式a++,a--,會先生成值,在執(zhí)行運算。
public class AutoInc{
public static void main(String [] args){
int i=1;
System.out.println("i:"+1);
System.out.println("++i:"+ ++i);
System.out.println("i++:"+ i++);
System.out.println("—i:"+ --i);
System.out.println("i--:" + i--);
}
}
輸出
i:1
++i:2
i++:2
--i:1
i--:1
從上面這個例子中可以看書前綴式和后綴式的區(qū)別
遞增操作符正是c++這個名字的一種解釋,"超越c一步"
關系操作符
關系操作符主要生成的的是一個boolean布爾結果,他們比較值之間的結果如果為真返回true,如果為假則返回false,關系操作符包括<,>,<=,>=,==,!=(不等于),等于和不等于適合于所有基本數(shù)據(jù)類型,而其他的操作符不適合對boolean值的操作,因為true和false兩個之間不存在大于或小于的關系
public class Equivalence{
public static void main(String [] arg){
Integer n1=new Integer(47);
Integer n2=new Integer(47);
System.out.println(n1==n2);
System.out.println(n1!=n2);
}
}
輸出
false
true
結果可能會跟你想的不一樣,在這里盡管對象內(nèi)容相同,但是對象的引用是不同的,而==和!=比較的是對象的引用,而不是內(nèi)容。
如果相比較兩對象的實際內(nèi)容是否相同的話要怎么做?需要使用所有對象都適用的equals()方法。但這個方法不適用于基本類型,基本類型直接使用==,!=即可
public class EqualMethod{
public static void main(String [] args){
Integer n1=new Integer(47);
Interger n2=new Integer(47);
System.out.println(n1.equals(n2));
}
}
輸出
true
但是如果引用的對象是自己創(chuàng)建的類,結果又會有不同
class Value{
int i;
}
public class EqualsMethod2{
public static void main(String [] args){
Value v1=new Value();
Value v2=new Value();
v1.i=v2.i=100;
System.out.println(v1.equals(v2));
}
}
輸出
false
結果又是false,這是由于equals的默認其實是比較引用。所以除非在自己的新類中重寫equals方法、否則是不能達到我們預期的效果的。
關系操作符
Operator |
Use |
Description |
> |
op1 > op2 |
當op1 大于op2 時返回true |
>= |
op1 >= op2 |
當op1 大于或等于op2 時返回true |
< |
op1 < op2 |
當op1 小于op2 時返回true |
<= |
op1 <= op2 |
當op1 小于或等于op2 時返回true |
== |
op1 == op2 |
當op1 等于大于op2 時返回true |
!= |
op1 != op2 |
當op1 不等于op2 時返回true |
邏輯操作符與(&&),或(||),非(!)能根據(jù)參數(shù)的關系返回布爾值
public class Bool{
public static void main(String [] args){
Random rand=new Random(47);
int i=rand.nextInt(100);
int j=rand.nextInt(100);
System.out.println("i=" + i);
System.out.println("j=" + j);
System.out.println("i > j is" +( i>j));
System.out.println("i < j is" +( i<j));
System.out.println("i > =j is" +( i>=j));
System.out.println("i <=j is" +( i<=j));
System.out.println("i ==j is" +( i==j));
System.out.println("i !=j is" +( i!=j));
System.out.println("(i <10) && (j<10) is" +((i <10) && (j<10)));
System.out.println("(i <10) || (j<10) is" +((i <10) ||(j<10)));
}
}
輸出
i=58
j=55
i>j is true
i<j is false
i>= j is true
i<=j is false
i==j is false
i!=j is true
(i <10) && (j<10) is false
(i <10) ||(j<10) isfalse
與或非操作只能應用于布爾值,如果在應該是String值的地方使用了boolean的話,布爾值會自動轉換成適當?shù)男问健?
應注意的是在程序上對浮點數(shù)的比較是非常嚴格的。
條件操作符
Operator |
Use |
Description |
&& |
op1 && op2 |
當op1和op2都是true時,返回true ;如果op1的值是false,則不運算右邊的操作數(shù) |
|| |
op1 || op2 |
當op1和op2有一個是true時,返回true;如果op1的值是true,則不運算右邊的操作數(shù) |
! |
! op |
當op是false時,返回true;當op是true時,返回false |
& |
op1 & op2 |
運算op1和op2;如果op1和op2都是布爾值,而且都等于true,那么返回true,否則返回false;如果op1和op2都是數(shù)字,那么執(zhí)行位與操作 |
| |
op1 | op2 |
運算op1和op2;如果op1和op2都是布爾值,而且有一個等于true,那么返回true,否則返回false;如果op1和op2都是數(shù)字,那么執(zhí)行位或操作 |
^ |
op1 ^ op2 |
運算op1和op2;如果op1和op2不同,即如果有一個是true,另一個不是,那么返回true,否則返回false;如果op1和op2都是數(shù)字,那么執(zhí)行位異或操作 |
當使用邏輯操作符的時候會遇到一種短路狀況。既一但能夠明確無誤地確定整個表達式的值,就不再計算表達式余下的部分了。因此,整個邏輯表達式靠后的部分有可能不再計算。下面的例子展示了短路現(xiàn)象
public class ShortCircuit{
static Boolean test1(int val){
System.out.println(“test1(“+val+")");
System.out.println(“result:"+(val<1));
return val<1
}
static Boolean test2(int val){
System.out.println(“test1(“+val+")");
System.out.println(“result:"+(val<2));
return val<2
}
static Boolean test3(int val){
System.out.println(“test1(“+val+")");
System.out.println(“result:"+(val<3));
return val<3
}
public static void main(String [] args){
Boolean b=test1(0)&&test2(2)&&test3(2);
System.out.println(“expression is “ + b);
}
}
輸出
test1(0)
result:true
test(2)
result:false
expression is false
由于調用了3個方法你會很自然的覺得3個方法應該都被運行,但實際上輸出并非這樣,因為在第二次測試產(chǎn)生一個false結果。由于這意味著整個表達式肯定為false,所以沒必要繼續(xù)計算剩余的表達式,那樣只是浪費?!岸搪贰耙淮握齺碓从诖?。實際上,邏輯上所有的邏輯表達式都有一部分不必計算,那將獲得性能的提升。
三元操作符
三元操作符也成為條件操作符,他顯得比較特別,因為有三個操作數(shù),但是他又確實屬于操作符的一種
其形式為
boolean-exp?value0 :value1
如果boolean-exp表達式結果為true,就計算value0,而且這個計算結果也就是操作符最終產(chǎn)生的值。如果boolean-exp表達式結果為false,就計算value1,同樣的,他的結果也將成為操作符最后的值。
當然它也可以被if-else代替,但是三元操作符與if-else是完全不同的,操作符會產(chǎn)生一個值。
public class TernaryIfElse{
static int ternary(int i){
return i<10?i*100:i*10;
}
static int standardIfElse(int i){
if(i<10)
return i*100;
else
return i*10;
}
public static void main(String [] args){
System.out.println(ternary(9));
System.out.println(ternary(10));
System.out.println standardIfElse( (9));
System.out.println standardIfElse( (10));
}
}
輸出
900
100
900
100
相比之下三元運算符要緊湊很多,而if-else更易理解
字符串操作符+和+=
Java中+和+=操作符除了之前講到的作用外,在特殊的上下文環(huán)境中是可以用作字符連接的。所以他們又稱為字符串操作符,字符串操作符有一些很有趣的行為。如果表達式以一個字符串起頭,那么后續(xù)所有的操作數(shù)都必須是字符串型(編譯器會自動將雙引號中的字符序列傳化成字符串):
public class StringOperators{
public static void main(String [] args){
int x=0,y=1,z=2;
String s="x,y,z";
System.out.println(s+x+y+z);
System.out.println(x+""+s);
s+="(summed) =";
System.out.println(s+(x+y+z));
System.out.println(“"+x);
}
}
輸出
x,y,z 012
0 x,y,z
x,y,z (summed) = 3
0
應注意的是第一行輸出的是012而不是總和3,是因為編譯器將他們自動轉化成了字符串形式,最后部分用+=講一個字符串追加到了s上,并且用括號來控制了編譯器的轉換,使他們可以順利求和。
相關文章
c#讀取圖像保存到數(shù)據(jù)庫中(數(shù)據(jù)庫保存圖片)
這篇文章主要介紹了使用c#讀取圖像保存到數(shù)據(jù)庫中的方法,大家參考使用吧2014-01-01