Пул String (ака interning ) и Целочисленный пул размывает разницу и может позволить вам использовать ==
для объектов в некоторых случаях вместо .equals
Это может дать вам большую производительность (?) за счет большей сложности.
Например:
assert "ab" == "a" + "b";
Integer i = 1;
Integer j = i;
assert i == j;
Компромисс сложности: вас может удивить следующее:
assert new String("a") != new String("a");
Integer i = 128;
Integer j = 128;
assert i != j;
Я советую вам держаться подальше от такой микро-оптимизации, а всегда использовать .equals
для объектов, а ==
для примитивов:
assert (new String("a")).equals(new String("a"));
Integer i = 128;
Integer j = 128;
assert i.equals(j);
Здесь:
int priority[n],min=at_copy[0],k,j;
for(j=0;j<n;j++){
min=at_copy[0];
for(i=0;i<n;i++){
if(at_copy[i]<min){
min=at_copy[i];
k=i;
}
}
at_copy[k]=999;
...
Представьте, что происходит, когда at_copy[0]
является минимальным значением. Тогда условие atcopy[i]<min
никогда не выполняется, и k остается неинициализированным, что приводит к выходу за пределы этой области:
at_copy[k]=999;
Вы должны инициализировать k с помощью 0
, так как вы предполагаете в первом итерации, что at_copy[0]
является минимумом.
int priority[n],min=at_copy[0],k=0,j;
С Geeks-IDE вы, возможно, были «везунчиками», и k имел значение 0 без инициализации.