Есть ли понятие & ldquo; указатели & rdquo; или & ldquo; небезопасный код & rdquo; в Java?

Чтобы иметь защищенный шаблон, вы можете заменить все символы на «\\\\», за исключением цифр и букв. И после этого вы можете поместить в этот защищенный шаблон свои специальные символы, чтобы заставить этот шаблон работать не как глупый цитируемый текст, а действительно как паттен, но ваш собственный. Без специальных символов пользователя.

public class Test {
    public static void main(String[] args) {
        String str = "y z (111)";
        String p1 = "x x (111)";
        String p2 = ".* .* \\(111\\)";

        p1 = escapeRE(p1);

        p1 = p1.replace("x", ".*");

        System.out.println( p1 + "-->" + str.matches(p1) ); 
            //.*\ .*\ \(111\)-->true
        System.out.println( p2 + "-->" + str.matches(p2) ); 
            //.* .* \(111\)-->true
    }

    public static String escapeRE(String str) {
        //Pattern escaper = Pattern.compile("([^a-zA-z0-9])");
        //return escaper.matcher(str).replaceAll("\\\\$1");
        return str.replaceAll("([^a-zA-Z0-9])", "\\\\$1");
    }
}
24
задан Ciro Santilli 新疆改造中心996ICU六四事件 3 May 2015 в 10:26
поделиться

3 ответа

Есть класс под названием sun.misc.Unsafe , это правда. Но он не использует указатели в коде Java (поскольку в Java нет указателей, хотя я согласен с тем, что java-ссылки похожи по своей концепции), большая часть его реализована с использованием нативного кода.

Как я упоминал в комментариях, это не является частью общедоступного API и не должно использоваться клиентским кодом. Тем не менее, вы можете увидеть это на работе, когда вы посмотрите на источники классов Atomic* в в пакете java.util.concurrent.atomic .

20
ответ дан Sean Patrick Floyd 3 May 2015 в 10:26
поделиться

Указатель - это концепция указания на ссылку. В C и C ++ вы можете явно обращаться к указателю, но в Java мы используем ссылку для указания объектов. Например, если вы передаете экземпляр методу, мы передаем его ссылку, но в итоге указатель передается. когда вы изменяете состояние экземпляра в методе, оно отражает, когда этот экземпляр используется после завершения вызова метода.

Мы используем ссылку в Java, который является указателем относительно JVM.

Когда мы используем новый оператор, он создает экземпляр в куче и возвращает адрес ссылки, на которую он указывает.

Я полагаю, что это ответило бы на ваш вопрос, если бы вы не могли прокомментировать мой ответ.

3
ответ дан Krishna Moorthy Seetha Raman 3 May 2015 в 10:26
поделиться

У Java есть указатели.

Путаница, имеет ли Java указатели или нет, тесно связана с обсуждением, является ли Java вызовом по ссылке или вызовом по значению.

Неинформированные люди думают, что в Java нет указателей, и поскольку метод может изменить объект, который был передан, с эффектами этого изменения, видимыми для вызывающего, они считают, что его нужно вызывать по ссылке.

Это не правильно, однако.

Что происходит, так это то, что в Java указатели передаются по значению . В Java нет других типов переменных для объектов, кроме переменных-указателей, и нет вызова по ссылке.

«Небезопасная» история - это совсем другое. Обычно это отличается от вопроса, есть ли в Java указатели или нет. Указатели Java безопасны; они указывают на объекты и, используя обычные языковые конструкции, ими нельзя манипулировать, чтобы указывать на произвольные области памяти.

Существует, однако, JNI, но потом нативный код делает потенциально небезопасные вещи, а не код Java.

Существует также Java в реальном времени (jsr-1), где вы абсолютно точно можете получить доступ к определенным областям памяти в вашей системе. Это, однако, очень специфическая и довольно редкая версия Java, которая в основном используется для встраиваемых целей. Если бы это подразумевалось, я предполагаю, что это было бы явно упомянуто.

10
ответ дан Mike Braun 3 May 2015 в 10:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: