Пустая строка - это уникальная строка нулевой длины.
Пустая строка является элементом идентификации операции конкатенации.
Пустая строка предшествует любой другой строке в лексикографическом порядке, поскольку она является самой короткой из всех строк.
Пустая строка является допустимой строкой, с которой должно работать большинство строковых операций.
Википедия> strlen(""); => 0 > "a" . "" == "a"; => true > "" . "a" == "a"; => true > "" < "\0"; => true
Сверху кажется, что PHP рассматривает пустую строку как допустимую строку.
> strstr("lolsome", ""); strstr(): Empty needle :1
Но кажется, что пустая строка не считается полностью допустимой. Скорее всего, PHP является единственным языком, который не позволяет искать подстроку в строке как пустую строку.
Это защитный механизм? Очевидно, программисты не должны защищать иглу с помощью
if
. Если так, то почему другие языки позволяют пройти этот тест !!! Разработчики языка должны ответитьИз чего состоит строка Python?
>>> ''.count('') 1
Очевидно, пустая строка имеет одну пустую строку.
>>> 'a'.count('') 2
Одна строка элементов имеет две пустые строки.
>>> 'ab'.count('') 3
Так что, похоже, строка Python является конкатенацией строк из одного элемента. Каждый элемент в строке помещается между двумя пустыми строками.
>>> "lolsome".split('') Traceback (most recent call last): File "
", line 1, in ValueError: empty separator Но здесь Python противоречит действительности пустой строки. Это ошибка?
Ruby и JavaScript проходят здесь тест.> "lolsome".split("") => ["l", "o", "l", "s", "o", "m", "e"]
Я собрал несколько языковых примеров из кода Розетты , интересно отметить, что все они допускают пустую строку в поиск подстроки и возврат истины.
awk 'BEGIN { print index("lolsome", "") != 0 }'
int main() { printf("%d\n", strstr("lolsome", "") != NULL); return 0; }
#include
#include int main() { std::string s = "lolsome"; std::cout << (s.find("") != -1) << "\n"; return 0; } using System; class MainClass { public static void Main (string[] args) { string s = "lolsome"; Console.WriteLine(s.IndexOf("", 0, s.Length) != -1); } }
(println (.indexOf "lolsome" ""))
package main import ( "fmt" "strings" ) func main() { fmt.Println(strings.Index("lolsome", "") != -1) }
Groovy
println 'lolsome'.indexOf('')
возвращает 0, при ошибке возвращает -1
class Main { public static void main(String[] args) { System.out.println("lolsome".indexOf("") != -1); } }
"lolsome".indexOf("") != -1
s = "lolsome" print(s:find "" ~= nil)
print index("lolsome", "") != -1;
Python
[1167]
"lolsome".find("") != -1
"lolsome".index("") != nil
Свойство .class
всегда возвращает объект Class
. Класс Класс
(странный) имеет общий параметр. Типы общих параметров являются подклассами.
Class<String> stringClass = String.class;
Class<Object> objectClass = Object.class;
И поскольку с универсальными типами Тип
не является НЕ супертипом Типа
(см. ] учебные пособия по Java ), это означает, что ответ - «Нет».
Объекты класса
в Java - все объекты одного класса.
Вы можете сказать, потому что если вы посмотрите на в Javadoc вы можете видеть, что класс Class
является final
.
попробуйте этот код:
boolean answer = Object.class.isAssignableFrom(String.class);
System.out.println(answer); // true!
однако:
Class<Object> string = String.class; <-- compile-time error
Class<? extends Object> string = String.class; <-- it's ok
Нет, существует только один класс с именем Class
. String.class является экземпляром Class, а также Object.class.
Причина, по которой Class не расширяет Class, даже если Y расширяет X, заключается в том, что для любого универсального типа G G не расширяет G
Вы можете найти это в FAQ и т. Д. A мешок яблок - это не мешок фруктов, даже если яблоко - это фрукт; потому что к последним можно добавлять любые фрукты, а к первым - только яблоки.
Если я правильно понимаю ваш вопрос, это не так. Объект, представляющий класс java.lang.String
, как и любой другой класс, всегда относится к классу java.lang.Class
.
Имейте в виду, что java.lang.Class
определен как final , поэтому вы не можете создать подкласс it.
Все объекты класса являются экземплярами класса.
Если вы хотите узнать иерархию класса, вы можете вызвать getSuperClass () и getInterfaces ()
Примечание: вы можете необходимо вызвать их рекурсивно, чтобы получить все суперклассы и интерфейсы.