Java的一些細節問題

來源:互聯網
上載者:User

標籤:對象   符號   print   oat   seq   nbsp   enc   資料   int   

一、Java求餘%的結果符號取決於除數的符號位;小數也可以求餘,餘數仍為小數。
 1 package com.test; 2  3 public class Test { 4  5     /** 6      * @author 容傑龍 7      */ 8     public static void main(String[] args) { 9         System.out.println(5/3); //110         System.out.println(5%3); //211         12         System.out.println(-5/3); //-113         System.out.println(-5%3); //-214         15         System.out.println(-5/-3); //116         System.out.println(-5%-3); //-217         18         System.out.println(5/-3); //-119         System.out.println(5%-3); //220         21         //浮點類型22         System.out.println(20.5%2.5); //0.523         System.out.println(20.2%10.1); //0.024         System.out.println(10%2.); //0.025         System.out.println(-10.8%2); //-0.800000000000000726         System.out.println(20.168%-10.111); //10.05699999999999927         System.out.println(20.168%10.111); //10.05699999999999928 29     }30 }
二、String對象的比較問題

A.String是不可變的,不能被繼承。String類內部通過char數組來儲存字串,而這個char數組被聲明為:final。String類的設計使用了不變模式。

B.String類的聲明如下:

 public final class String implements java.io.Serializable, Comparable, CharSequence

C.資料區的三個部分:JAVA 虛擬機器棧(可以簡稱為Java棧)、堆和運行時常量池(簡稱常量池)

D.常量池

  虛擬機器必須為每個被裝載的類型維護一個常量池。常量池就是該類型所用常量的一個有序集合,包括直接常量(string,integer和floating point常量)和對其他類型、欄位和方法的符號引用。字串字面值會儲存在常量池中。

  String x = "abc"; String y = new String("abcd");

  第一條語句沒有在堆中分配記憶體,而是將“abc”儲存在常量池中。對於第二條語句,同樣會在常量池中有一個“abcd”的字串,當new時,會拷貝一份該字串存放到堆中,於是y指向了堆中的那個“abcd”字串。

 

 1 package com.test; 2  3 public class Test { 4     /** 5      * @author 容傑龍 6      */ 7     private static String a = "ab"; 8     private static String ab = new String("ab"); 9     public static void main(String[] args) {10         /**11          * 當兩個字串字面值串連時(相加),12          * 得到的新字串依然是字串字面值,13          * 儲存在常量池中。14          */15         String a1="abc123";16         String a2="ab"+"c"+123;17         System.out.println(a1==a2); //true18         /**19          * 當字串字面值與String類型變數串連時,20          * 得到的新字串不再儲存在常量池中,21          * 而是在堆中建立一個String對象來存放。22          * 很明顯常量池中要求的存放的是常量,23          * 有String類型變數當然不能存在常量池中了。24          */25         String b1="abc123";26         String b2="123";27         String b3="abc"+b2;28         System.out.println(b1==b3); //false29         /**30          * 此處是字串字面值與String類型常量串連,31          * 得到的新字串依然儲存在常量池中。32          */33         String c1 = "ab";34         final String c2 = "b";35         String c3 = "a" + c2;36         System.out.println(c1 == c3); //true37         /**38          * final String d2 = get123();39          * 其實與final String d2 = new String(“123”);是一樣的。40          * 也就是說return “123”會在堆中建立一個String對象儲存”123”,41          * 雖然d2被定義成了final。可見並非定義為final的就儲存在常量池中,42          * 很明顯此處d2常量引用的String對象儲存在堆中,43          * 因為get123()得到的String已經儲存在堆中了,44          * final的String引用並不會改變String已經儲存在堆中這個事實。45          */46         String d1 = "abc123";47         final String d2 = get123();48         String d3 = "abc" + d2;49         System.out.println(d1 == d3);//false50         /**51          * intern()方法52          * 返回字串對象的正常化表示形式。53          * 一個初始為空白的字串池,它由類 String 私人地維護。54          * 當調用 intern 方法時,如果池已經包含一個等於此 String 對象的字串55          * (用 equals(Object) 方法確定),則返回池中的字串。56          * 否則,將此 String 對象添加到池中,並返回此 String 對象的引用。57          * 它遵循以下規則:對於任意兩個字串 s 和 t,若且唯若 s.equals(t) 為 true 時,58          * s.intern() == t.intern() 才為 true。59          * 所有字面值字串和字串賦值常量運算式都使用 intern 方法進行操作。60          * 61          */62         String s1 = "a";63         String s2 = "b";64         String s = s1 + s2;65         System.out.println(s == a);//false66         System.out.println(s.intern() == a);//true67         ////////////////////////////////68         String ss1 = "a";69         String ss2 = "b";70         String ss = ss1 + ss2;71         System.out.println(ss == ab);//false72         System.out.println(ss.intern() == ab);//false73         System.out.println(ss.intern() == ab.intern());//true74     }75 76     private static String get123() {77         return "abc";78     }79 }

 

Java的一些細節問題

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.