相关疑难解决方法(0)

为什么char []比字符串更适合密码?

在Swing中,密码字段具有getPassword()(返回char[])方法而不是通常getText()(返回String)方法.同样,我遇到了一个不使用String来处理密码的建议.

为什么String在密码方面会对安全构成威胁?使用感觉不方便char[].

java security string passwords char

3298
推荐指数
16
解决办法
38万
查看次数

Java字符串真的是不可变的吗?

我们都知道StringJava 中是不可变的,但请检查以下代码:

String s1 = "Hello World";  
String s2 = "Hello World";  
String s3 = s1.substring(6);  
System.out.println(s1); // Hello World  
System.out.println(s2); // Hello World  
System.out.println(s3); // World  

Field field = String.class.getDeclaredField("value");  
field.setAccessible(true);  
char[] value = (char[])field.get(s1);  
value[6] = 'J';  
value[7] = 'a';  
value[8] = 'v';  
value[9] = 'a';  
value[10] = '!';  

System.out.println(s1); // Hello Java!  
System.out.println(s2); // Hello Java!  
System.out.println(s3); // World  
Run Code Online (Sandbox Code Playgroud)

为什么这个程序运行这样?为什么价值s1s2变化,但不是s3

java string reflection immutability

391
推荐指数
11
解决办法
5万
查看次数

字符串是不可变的.究竟是什么意思?

我在不可变字符串上编写了以下代码.

public class ImmutableStrings {

    public static void main(String[] args) {
        testmethod();
    }

    private static void testmethod() {
        String a = "a";
        System.out.println("a 1-->" + a);
        a = "ty";
        System.out.println("a 2-->" + a);
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

a 1-->a  
a 2-->ty
Run Code Online (Sandbox Code Playgroud)

这里变量的值a已经改变(许多人说不可变对象的内容不能改变).但究竟是什么意思说String是不可改变的?你能否为我澄清一下这个话题?

来源:https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

java string immutability

194
推荐指数
4
解决办法
26万
查看次数

"text"和new String("text")之间有什么区别?

这两个陈述之间有什么区别?

String s = "text";

String s = new String("text");
Run Code Online (Sandbox Code Playgroud)

java string

187
推荐指数
4
解决办法
7万
查看次数

为什么String在Java中是不可变的?

我在接受采访时被问到为什么String是不可变的

我这样回答:

当我们在java中创建一个字符串时,String s1="hello";就会在字符串池(hello)中创建一个对象,而s1将指向hello.如果我们再这样做,String s2="hello";那么将不会创建另一个对象但s2将指向,hello 因为JVM将首先检查如果字符串池中存在相同的对象. 如果不存在则只创建一个新对象,否则不创建.

现在,如果假设Java允许串可变那么如果我们改变S1hello world那么S2价值也将hello world因此Java字符串是不可改变的.

如果我的答案是还是错,请问任何人可以告诉我吗?

java string

169
推荐指数
7
解决办法
18万
查看次数

如何在Java中使用指针?

我知道Java没有指针,但我听说Java程序可以用指针创建,这可以由少数java专家完成.这是真的吗?

java pointers unsafe

102
推荐指数
7
解决办法
33万
查看次数

"new String()"也是不可变的吗?

我一直在研究Java String.以下问题基于以下帖子

Java String是java中特殊
的String不可变性

  1. 不可变性:现在,通过不变性,String类被设计为公共池中的值可以在其他位置/变量中重用.如果String被创建为, 则这很好

    String a = "Hello World!"; 但是,如果我创建String之类的

    String b = new String("Hello World!"); 为什么这也是不变的?(或者是吗?).由于这有一个专用的堆内存,我应该能够修改它而不影响任何其他变量.因此,通过设计,还有其他任何原因,为什么String整体被认为是不可改变的?或者我的上述假设是错误的?

  2. 我想问的第二件事是关于常见的字符串池.如果我创建一个字符串对象为

    String c = ""; 是在池中创建的空条目?

这些帖子上已经有帖子吗?如果是这样,有人可以分享链接吗?

java string immutability

73
推荐指数
8
解决办法
8921
查看次数

在Java中修剪字符串的正确方法

在Java中,我这样做是为了修剪一个字符串:

String input = " some Thing ";
System.out.println("before->>"+input+"<<-");
input = input.trim();
System.out.println("after->>"+input+"<<-");
Run Code Online (Sandbox Code Playgroud)

输出是:

before->> some Thing <<-
after->>some Thing<<-
Run Code Online (Sandbox Code Playgroud)

作品.但我想知道如果通过为自己分配一个变量,我做的是正确的.我不想通过创建另一个变量并为其分配修剪值来浪费资源.我想在原地进行修剪.

我这样做对吗?

java string trim variable-assignment

28
推荐指数
2
解决办法
8万
查看次数

Java PatternSyntaxException:字符串替换非法重复?

我试图写将接受的方法String,检查是否有某些记号的情况下(例如${fizz},${buzz},${foo}等),并用新的字符串,它是从获取替换每个标记Map<String,String>.

例如,如果我将此方法传递给以下字符串:

"现在如何$ {fizz} cow.$ {buzz}奇形怪状的$ {foo}."

如果该方法参考以下内容Map<String,String>:

Key             Value
==========================
"fizz"          "brown"
"buzz"          "arsonist"
"foo"           "feet"
Run Code Online (Sandbox Code Playgroud)

然后结果字符串将是:

"怎么现在是棕色的牛.纵火犯的脚形状奇特."

这是我的方法:

String substituteAllTokens(Map<String,String> tokensMap, String toInspect) {
    String regex = "\\$\\{([^}]*)\\}";
    Pattern pattern = Pattern.compile(regex);
    Matcher matcher = pattern.matcher(toInspect);
    while(matcher.find()) {
        String token = matcher.group();     // Ex: ${fizz}
        String tokenKey = matcher.group(1); // Ex: fizz
        String replacementValue = null;

        if(tokensMap.containsKey(tokenKey))
            replacementValue = tokensMap.get(tokenKey);
        else
            throw new RuntimeException("String contained an …
Run Code Online (Sandbox Code Playgroud)

java regex string exception

26
推荐指数
2
解决办法
5万
查看次数

字符串文字的垃圾收集

我正在阅读垃圾收集,当我搜索字符串文字垃圾收集时,我的搜索结果令人困惑.

我需要澄清以下几点:

  1. 如果在编译时将字符串定义为文字[例如:String str = "java"]那么它是否会被垃圾收集?

  2. 如果使用实习方法[例如:String str = new String("java").intern()]那么它会被垃圾收集吗?它也将与第1点中的字符串文字区别对待.

  3. 有些地方提到只有在String卸载类时才会对文字进行垃圾收集?它是否有意义,因为我认为String不会卸载课程.

java string garbage-collection

21
推荐指数
2
解决办法
1万
查看次数