==
сравнивает ссылки на объекты.
.equals()
сравнивает значения String.
Иногда ==
дает иллюзии сравнения значений String, как в следующих случаях:
String a="Test";
String b="Test";
if(a==b) ===> true
Это связано с тем, что при создании любого строкового литерала JVM сначала ищет этот литерал в пуле строк, и если он найдет совпадение, эта же ссылка будет передана новой String. Из-за этого получаем:
(a == b) ===> true
String Pool
b -----------------> "test" <-----------------a
Однако ==
не выполняется в следующем случае:
String a="test";
String b=new String("test");
if (a==b) ===> false
В этом случае для new String("test")
оператор new String будет создан в куче, и эта ссылка будет указана на b
, поэтому b
будет дана ссылка на кучу, а не на String pool.
Теперь a
указывает на String в пуле String, а b
указывает на String в куче. Из-за этого мы получаем:
, если (a == b) ===> false.
String Pool
"test" <-------------------- a
Heap
"test" <-------------------- b
Пока .equals()
всегда сравнивает значение String, поэтому дает true в обоих случаях:
String a="Test";
String b="Test";
if(a.equals(b)) ===> true
String a="test";
String b=new String("test");
if(a.equals(b)) ===> true
Таким образом, использование .equals()
всегда лучше.
Ниже приведен обновленный предыдущий ответ для выхода на вход.
#include <stdio.h>
#define MAX 100
int main()
{
int n, i, array[MAX];
char num[MAX];
int res;
printf("Enter a list of integers [ctrl+d] to end\n");
for(i = 0; i <= MAX; ++i){
printf("> ");
fgets(num, sizeof(num), stdin);
res = sscanf(num, "%d", &n);
if(res != 1)
break;
n = atoi(num);
array[i] = n;
}
puts ("");
int z;
for (z = 0; z < i; z++)
printf("The array is %d\n", array[z]);
return 0;
}
У вас есть то, что вы хотите, вам просто нужно несколько настроек. Во-первых, enter не возвращает -1, чтобы сохранить его просто, вам нужно ввести ctrl+d
, чтобы остановить ввод. После вашего окончательного ввода просто нажмите ctrl+d
. Взгляните:
#include <stdio.h>
#define MAX 100
int main()
{
int n, i, array[MAX];
printf("Enter a list of integers [ctrl+d] to end\n");
for(i = 0; i <= MAX; ++i){
printf("> ");
if (scanf("%d", &n) == -1)
break;
array[i] = n;
}
puts ("");
int z;
for (z = 0; z < i; z++)
printf("The array is %d\n", array[z]);
return 0;
}
вывод:
Enter a list of integers [ctrl+d] to end
> 1
> 2
> 3
> 4
> 5
>
The array is 1
The array is 2
The array is 3
The array is 4
The array is 5
puts("")
делает? 2. Могу ли я сделать печать массива на одной строке, например The array is 1, 2, 3, 4, 5
? Кроме того, вещь enter
очень важна. Еще раз спасибо.
– Rich Scriven
29 May 2014 в 04:13
kbhit()
, который является общим именем для процедуры ввода с помощью struct termios
, чтобы поместить клавиатуру в режим raw-unbufferd, чтобы вы могли принимать каждое нажатие клавиши без возврата. Затем вы можете проверить, нажата ли клавиша ввода (unsigned int 10).
– David C. Rankin
29 May 2014 в 04:16
puts("")
был просто взломан, чтобы заставить новую строку без вахрирования синтаксического анализа printf. Это была не соответствующая часть ответа. Я не пытался сопоставить отображаемый формат вывода. Похоже, что OP больше беспокоился о том, как работать с массивом.
– David C. Rankin
29 May 2014 в 04:18