Java中字串比較的一道面試題

2021-07-10 10:58:38 字數 1429 閱讀 5315

題目:

public

class test

}

輸出結果:

true

false

false

false

解析:直接把上面**進行反編譯一下就知道其中的原理了。

上面可以進行如下理解:

string a = "hello";  

string b = "hello";

string tmp = string.valueof(a);

stringbuilder sb = new stringbuilder(tmp);

string c = sb.tostring();

string tmp = string.valueof(a);

stringbuilder sb = new stringbuilder(tmp);

string d = sb.tostring();

string tmp = string.valueof(a);

stringbuilder sb = new stringbuilder(tmp);

string e = sb.tostring();

補充:類的final變數和普通變數有什麼區別?

public

class test

}

結果:

true

false

這裡面就是final變數和普通變數的區別了,當final變數是基本資料型別以及string型別時,如果在編譯期間能知道它的確切值,則編譯器會把它當做編譯期常量使用。也就是說在用到該final變數的地方,相當於直接訪問的這個常量,不需要在執行時確定。這種和c語言中的巨集替換有點像。因此在上面的一段**中,由於變數b被final修飾,因此會被當做編譯器常量,所以在使用到b的地方會直接將變數b 替換為它的值。而對於變數d的訪問卻需要在執行時通過鏈結來進行。

下面反編譯一下看一下就知道確實編譯器做了手腳。

不過要注意,只有在編譯期間能確切知道final變數值的情況下,編譯器才會進行這樣的優化,比如下面的這段**就不會進行優化:

public

class test

public

static string gethello()

}

這段**的輸出結果為false。

字串程式設計題一道

package cn.exercise.algorithmstest 編寫乙個擷取字串的函式,輸入為乙個字串和位元組數,輸出為按位元組擷取的字串。但是要保證漢字不被截去半個,列如 人abc 4應該擷取為 人ab 輸入 人abc們def 6,應該輸出 人abc 而不是 人abc 半個們 author ...

一道字串貪心題

dna序列 dna.c cpp in out 時間限制 2s 空間限制 2g 題目描述 2018年10月,mit建立了最新的奈米科技研究中心mit.nano。此後,不斷有新的研究成果在此產生。有一天,研究者發現了一種新的生物,這種生物的基因中含有 條dna序列,每一條都有一定的長度,科學家們可以將每...

一道字串複製的面試題目

很多技術筆試都考字串複製函式的編寫 不能用那個庫函式 有人說說這個函式的考點在 和編寫的時候要注意的問題嗎?最好能有編寫嚴謹的例程。函式宣告 char strcpy char strdest,const char strsrc 目前為止,我總結出 1,考察strdest和strsrc非空 2,考察s...