日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java编写代码时易出错_JAVA中易出错的小问题(一)

發(fā)布時間:2024/9/19 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java编写代码时易出错_JAVA中易出错的小问题(一) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

-----------?android培訓(xùn)、java培訓(xùn)、java學(xué)習(xí)型技術(shù)博客、期待與您交流!?------------

第一:奇數(shù)性

static boolean isodd(int i){

return i % 2 == 1;

}

}

奇數(shù)可定義為被2整除,余數(shù)為1的整數(shù)。表達(dá)式i%2計算的是i除以2時所產(chǎn)生的余數(shù),因此看起啦這個這個程序改可行,但是它并不行,在四分之一的時間里它產(chǎn)生的都是錯誤的。因為在所有的int數(shù)值中,有一半是負(fù)數(shù),而isodd方法對所有負(fù)數(shù)的判斷都會失敗。在任何負(fù)數(shù)上調(diào)用該方法都會返回false,無論該整數(shù)是偶數(shù)還是奇數(shù)。

第二:浮點數(shù)

public class Xiao {

public static void main(String[] args) {

System.out.print(2.00-1.10);

}

}

該程序打印的是0.89999999999999 而不是0.9;問題在于1.1這個數(shù)字不能被精確表示為一個double,因此被表示為最接近它的double值,該程序從2中減去的就是這個值。所以,這個計算結(jié)果并不是最接近0.9的double值。作為結(jié)果的double值的最短表示就是你所看到的值。

第三:長整數(shù)

public class longDivision {

public static void main(String[] args) {

final long A=24*60*60*1000*1000;

final long B=24*60*60*60*1000;

System.out.print(A/B);

}

}

看似程序該打印的是1000,其實打印的是5. 問題在于常數(shù)的計算確實溢出啦,雖然計算的結(jié)果合適放入long中,并且其空間還有富余,但是這個結(jié)果并不適合放入int中。這個計算完全是以int運算執(zhí)行的,并且只有在運算完成之后,其結(jié)果才提升為long。而此時已經(jīng)太遲,返回溢出啦。

改:

public class longDivision {

public static void main(String[] args) {

final long A=24L*60*60*1000*1000;

final long B=24L*60*60*60*1000;

System.out.print(A/B);

}

}

這樣改就對啦。

第四:大小寫錯誤

public class elementary {

public static void main(String[] args) {

System.out.print(12345+5432l);

}

}

本次錯誤的原因是把5432l看錯啦“l(fā)”是字母“L”的小寫;切記在long類型字面常量中,一定要用大寫的“L”;

第五:進制數(shù)

public class Joyofhex{

public static void main(String[] args) {

System.out.print(Long.toHexString(0x1000000000L+0xcafebabe));

}

}

十進制字面常量具有一個很好的屬性,即所有十進制字面常量都是正的,額十六進制或是八進制字面常量并具備這個屬性,想寫一個負(fù)的十進制常量,可以使用一元取反操作符(-)連接一個十進制字面常量。以這種方式,你可以用十進制寫任何int或long型數(shù)值,不管它是正的還是負(fù)的,并且負(fù)的十進制常數(shù)可以很明確的用一個減號來標(biāo)識。但是十六進制和八進制字面常量并不是這樣。他們可以具有正的以及負(fù)的數(shù)值。如果十六進制和八進制常量的最高位被置位了,那么他們就是負(fù)數(shù)。在這個過程中,數(shù)字0xcafebaba是int常量,它的最高位被置位了,那么它是一個負(fù)數(shù),它的十進制值-889275714;

改:

public class Joyofhex{

public static void main(String[] args) {

System.out.print(Long.toHexString(0x1000000000L+0xcafebabeL));

}

}

在0xcafebabe后加上L表示長整形數(shù)相加;

第六:多重轉(zhuǎn)型

public class Multicast {

public static void main(String[] args) {

System.out.print((int)(char)(byte)-1);

}

因為byte是有符號的類型,所以在將byte數(shù)值-1轉(zhuǎn)換成char時,會發(fā)生符號擴展。作為結(jié)果char數(shù)值的16位就都被置位了,因此它等于2^16-1.即65535.

如果最初的數(shù)值類型是有括號的,就執(zhí)行符號擴展;如果它是char,那么不管它將要被轉(zhuǎn)換成什么類型,都執(zhí)行零擴展。

第七:變量賦值

public class DosEquis{

public static void main(String[] args) {

int x=1984;

int y=2001;

x^=y^=x^=y;

System.out.print("x="+x+"; y="+y);

}

}

它執(zhí)行的結(jié)果是x=0;y=1984;

在單表達(dá)式中不要對相同的變量賦值兩次。表達(dá)式如果包含對相同變量的多次賦值,就會引起混亂,并且很少能夠執(zhí)行所希望的操作。即使對多個變量進行賦值也很容易出錯。

第八:操作數(shù)轉(zhuǎn)型

public class Xiao{

public static void main(String[] args) {

char x='X';

int i=0;

System.out.println(true?x:0);

System.out.println(false?i:x);

}

}

運行程序結(jié)果是:X?? 88

這是由于在表達(dá)式中使用不同的類型操作數(shù);在這兩個表達(dá)式中第一個表達(dá)式X是char類型的,而0和i都是int類型的;

第九:字符錯誤

public class Xiao{

public static void main(String[] args) {

System.out.println("H"+"a");

System.out.println('H'+'a');

}

}

執(zhí)行的結(jié)果是:Ha 169

編譯器在計算表達(dá)式'H''a'時,是通過我們熟知的拓寬基本類型轉(zhuǎn)換,將兩個具有字符類型數(shù)值的操作數(shù),提升為int數(shù)值而實現(xiàn)的,從char到int的拓寬基本類型轉(zhuǎn)化是將16位的char數(shù)值零寬展到32位的int。對于‘H’char數(shù)值是72,而對于‘a(chǎn)’,char數(shù)值97,因此表達(dá)式‘H’+‘a(chǎn)’等價于int72+97,或169;

總結(jié)

以上是生活随笔為你收集整理的java编写代码时易出错_JAVA中易出错的小问题(一)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。