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庫中定義的
Java中的final變數、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巨集替換的機制導致的錯誤。
macbook中gcc替換為gnu gcc
gpo stack pre 發現 quest c-c compiler default .com macbook中gcc被定義為clang,而正統的gnu gcc卻只能使用gcc-7(gcc 7版本),然而,如果修改/usr/bin的鏈接,還容易造成系統錯誤,因為mac的工
homestead中nginx替換為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++中巨集與函式的區別
巨集在編譯時就被替換成它內部的語句了,而函式是執行時呼叫的 所以如果是簡單的東西就寫成巨集,這樣沒有呼叫函式的開銷,效率會高一些。相反,由於巨集每被呼叫一次,就相當於把程式碼複製一份,所以如果比較複雜的巨集被多次呼叫的話,會增加程式碼的體積。因此,太複雜的運算就寫成函式比較好了。 另外,要注意在巨集