1. 程式人生 > >final變數中的巨集替換

final變數中的巨集替換

原始碼1:

public class Java15 {
    public static void main(String[] args) {
        String s1="瘋狂java";
        String s2="瘋狂"+"java";
        System.out.println(s1==s2);
        String str1="瘋狂";
        String str2="java";
        String s3=str1+str2;
        System.out.println(s1==s3);
    }
}

執行結果:


原始碼2:

public class Java15 {
    public static void main(String[] args) {
        String s1="瘋狂java";
        String s2="瘋狂"+"java";
        System.out.println(s1==s2);
        final String str1="瘋狂";
        final String str2="java";
        String s3=str1+str2;
        System.out.println(s1==s3);
    }
}
執行結果:

原始碼3:

public class Java15 {
    public static void main(String[] args) {
        String s1="瘋狂java";
        String s2="瘋狂"+"java";
        System.out.println(s1==s2);
        final String str1;
        str1="瘋狂";
        final String str2;
        str2="java";
        String s3=str1+str2;
        System.out.println(s1==s3);
    }
}
執行結果:

  1.變數在編譯時是無法確定的,而常量(直接量在編譯時)是確定的;則上面原始碼1中s1,s2是可以確定的,它們都指向常量池中的瘋狂java,所以s1=s2;而str1,str2由於是變數,它們是不可以確定的,則它們指向就不同了,所以,str2!=str2;

  2.在原始碼2中由於將str1,str2都用了final修飾,都將他們定義為了巨集定義,所以str1,str2將不再是變數;

  3.對於final例項變數而言,只有在定義該變數時指定初始值才會有巨集變數的效果,由於原始碼3中在定義時並沒有初始化,所以沒有初始化效果,所以此時str1,str2是未知量,所以str1!=str2.

相關推薦

final變數巨集替換

原始碼1: public class Java15 { public static void main(String[] args) { String s1="瘋狂java"; String s2="瘋狂"+"java";

Java執行“巨集替換”的變數

對於一個final變數,不管它是類變數、例項變數,還是區域性變數,只要定義該變數時使用了final修飾符修飾,並在定義該final類變數時指定了初始值,而且該初始值可以在編譯時就被確定下來,那麼這個final變數本質上已經不再是變數,而是相當於一個直接量。 public c

Oracle替換變數,&變數名,&&變數

替換變數(僅用於SQL *Plus或者用於原理和SQL *Plus相同的開發工具): 臨時儲存值 利用它可以達到建立通用指令碼的目的 利用它可以達到和使用者互動,故在SQL *Plus中又稱互動式命令 替換變數的格式式在變數名稱前加一個&,以便在執行SQL命令時提示使用者輸入替換資料,然

關於字元驅動變數巨集,標頭檔案等的簡介 module_init module_exit

  ssize_t second_drv_read(struct file *file, char __user *buf, size_t size, loff_t *ppos) { } 這是一個檔案讀函式  ssize_t是signed size_t,size_t是標準C庫中定義的

Javafinal變數final方法和final

一、final變數 final關鍵字可用於變數宣告,一旦該變數被設定,就不可以再改變該變數的值。通常,由final定義的變數為常量。例如,在類中定義PI值,可以使用如下語句: final double PI=3.14; 在Java中定義全域性常量,通常使用public static

sql時間巨集替換

之前做了一個sql任務排程平臺,sql根據配置的cron表示式執行;排程平臺需要靈活的根據當前時間去計算並替換sql中特殊的時間巨集;舉個例子 select * from order a join or

匿名內部類和區域性內部類只能訪問final變數的原因

在一個方法中,如果建立一個匿名內部類,並且在內部類中藥訪問方法的引數,我們必須將該引數用final進行修飾才能訪問,這個的原因主要是由於方法和內部類的生命週期不相同導致的。 當我們執行一個帶參的方法時,在該方法的呼叫棧中將生成一個區域性變數(即該引數),如果在該方法中建立了

C++和C語言的區別(四)——使用C++特性替換巨集定義

C語言的巨集有一個重要特性那就是在預處理階段就進行字元替換。 用C++的特性替換C語言中的巨集主要有三種方式:①typedef、②inline函式、③const修飾符 而這三種方式都有和巨集最大不同的區別就是,他們都是在編譯期進行的。 (1)typedef:C語言與C++兩者所共有的,但

C語言字串使用巨集替換

1 背景     在定義一個字串時,希望有一部分內容可以使用巨集替換。當嘗試使用如下方式來實現時,發現並不能達到目的。#define XXX programmer char str[] = “I li

C++巨集替換

1.引子 #define cat(x, y) x ## y 那麼cat(a, b)和cat(cat(a, b), c)的結果是啥. #define str_impl(x) #x #define str(x) str_impl(x) 的意圖何在. 2.規則 巨集替換是C

c語言靜態全域性變數、靜態區域性變數、全域性變數、區域性變數巨集

全域性變數: 全域性變數具有全域性作用域。,它只編譯期被始化一次,它不能用變數來初始化。全域性變數只需要在一個原始檔中定義,就可以作用於所有的原始檔。在其他不包含全域性變數定義的原始檔中需要用extern關鍵詞來再次宣告這個全域性變數 區域性變數: 區域性變數只有區域性

實際專案關於java常量巨集替換的實際問題

專案場景:之前在做支付寶對接的時候,遇到一個問題,就是改變定義的static final常量的值之後,並將重新編譯好的檔案上傳到伺服器上,發現引用這個常量的程式碼卻沒有變成新的值。 分析:這是典型的java巨集替換的應用,也是因為不理解java巨集替換的機制導致的錯誤。

macbookgcc替換為gnu gcc

gpo stack pre 發現 quest c-c compiler default .com macbook中gcc被定義為clang,而正統的gnu gcc卻只能使用gcc-7(gcc 7版本),然而,如果修改/usr/bin的鏈接,還容易造成系統錯誤,因為mac的工

homesteadnginx替換為openresty

https nginx的啟動 static fix har http jit efi 註意 wget https://openresty.org/download/openresty-1.11.2.2.tar.gz tar -xzvf openresty-1.11.2.2

oracle替換函數replace和translate函數

轉換成 www char 總結 就是 cnblogs lec replace html 1.translate 語法:TRANSLATE(char, from, to) 用法:返回將出現在from中的每個字符替換為to中的相應字符以後的字符串。

指標實現取出結構體變數的成員

#include <stdio.h> struct Student{   int age;   float score;   char sex;}; int main(void){   struct Student st = {80, 66.6F, 'F'};   struct Student

Python替換函式---replace(),re.sub()和strip()

這是原文,寫的很好,共勉! 1. replace() 物件.replace(rgExp, replaceText, max) rgExp,replaceText是必須要有的,max是可選的引數,可以不加 在物件的每個rgExp都替換成replaceText,從左到右最多max

windows 使用者變數和系統變數的Path差別

  點選“我的電腦→屬性→高階系統設定”標籤的“環境變數”button,出現“環境變數”對話方塊,假設當前是以Administrator登入系統的使用者。對話方塊的上面為Administrator的使用者變數,對話方塊的以下為系統變數(即相當於系統中全部使用者的使用者變數)。

Linux Shell Echo多變數輸出時怪異疊寫現象(某些字串變數含有\r或\n)

今天利用Linux Shell命令從檔案中擷取一部分文字行資訊 `Cat file | grep someKeyword` 到Shell變數中,然後又用shell字串變數擷取的方法,提取文字行內更準確的字元資訊;利用同樣的操作方法,得到多個字串變數資訊,最後再用echo組合多變數輸出所需要的格式資訊

C++巨集與函式的區別

巨集在編譯時就被替換成它內部的語句了,而函式是執行時呼叫的 所以如果是簡單的東西就寫成巨集,這樣沒有呼叫函式的開銷,效率會高一些。相反,由於巨集每被呼叫一次,就相當於把程式碼複製一份,所以如果比較複雜的巨集被多次呼叫的話,會增加程式碼的體積。因此,太複雜的運算就寫成函式比較好了。 另外,要注意在巨集