相关疑难解决方法(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万
查看次数

Java中字符串的不变性

请考虑以下示例.

String str = new String();

str  = "Hello";
System.out.println(str);  //Prints Hello

str = "Help!";
System.out.println(str);  //Prints Help!
Run Code Online (Sandbox Code Playgroud)

现在,在Java中,String对象是不可变的.那么为什么对象str可以赋值"帮助!".这与Java中字符串的不变性相矛盾吗?任何人都可以向我解释一下不变性的确切概念吗?

编辑:

好.我现在得到它,但只是一个后续问题.以下代码如何:

String str = "Mississippi"; 
System.out.println(str); // prints Mississippi 

str = str.replace("i", "!"); 
System.out.println(str); // prints M!ss!ss!pp! 
Run Code Online (Sandbox Code Playgroud)

这是否意味着再次创建了两个对象("Mississippi"和"M!ss!ss!pp!"),并且引用str指向replace()方法之后的另一个对象?

java string immutability

211
推荐指数
7
解决办法
9万
查看次数

为什么String类在Java中声明为final?

从我得知该类java.lang.String在Java中被宣布为final时,我想知道为什么会这样?当时我没有找到任何答案,但这篇文章:如何在Java中创建String类的副本?让我想起了我的疑问.

当然,String提供了我所需要的所有功能,并且从未想过任何需要扩展String类的操作,但你仍然永远不会知道某人可能需要什么!

那么,有没有人知道设计师在决定最终时的意图是什么?

java string final

134
推荐指数
5
解决办法
8万
查看次数

Python:如何通过引用传递字符串?

从这个链接:我如何通过引用传递变量?我们知道,当Python作为参数传递给函数时,Python将复制一个字符串(一个不可变类型变量),但我认为如果字符串很大,它将浪费内存.在许多情况下,我们需要使用函数来包装字符串的一些操作,所以我想知道如何更有效地执行它?

python string

19
推荐指数
6
解决办法
5万
查看次数

new String()vs literal string performance

StackOverflow上多次询问过这个问题,但没有一个是基于性能的.

Effective Java书中给出了它

如果 String s = new String("stringette");在循环或频繁调用的方法中发生,则可以不必要地创建数百万个String实例.

改进版本只是以下内容: String s = "stringette";此版本使用单个String实例,而不是每次执行时都创建一个新实例.

所以,我尝试了两者,发现性能有了显着提高:

for (int j = 0; j < 1000; j++) {
    String s = new String("hello World");
}
Run Code Online (Sandbox Code Playgroud)

需要大约399 372纳秒.

for (int j = 0; j < 1000; j++) {
    String s = "hello World";
}
Run Code Online (Sandbox Code Playgroud)

大约需要23 000纳秒.

为什么会有这么多的性能提升?内部是否有任何编译器优化

java string

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

Java中的toUpperCase不起作用

我有一个字符串:

String c = "IceCream";
Run Code Online (Sandbox Code Playgroud)

如果我使用toUpperCase()函数然后它返回相同的字符串,但我想得到"ICECREAM".

问题出在哪儿?

java string

12
推荐指数
3
解决办法
5万
查看次数

为什么java有StringBuilder或StringBuffer?

String和(StringBuilderStringBuffer)之间存在许多差异,例如可变性和许多字符串操作

可能这个问题看起来有点傻,但我想知道编程范式.

我想问一下,为什么Java实现了另一个类,StringBuilder或者StringBuffer像数据结构那样String.为什么他们自己没有给出这些功能String.

为什么不把String本身线程安全的,或提供一些额外的功能StringBuilderStringBuffer有?

java string stringbuilder stringbuffer

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

不可变对象(如String)的实际好处是什么,而不是仅使用静态final?

我的意思是,为什么存在defacto不可变对象?为什么我们不只是使用最终的静态修饰符?关于String,Java使它变得不可变的重要性是什么?

java string static final immutability

0
推荐指数
1
解决办法
227
查看次数

为什么String对象在java中是不可变的?

通常情况下程序员想要操纵String对象.java中String对象的工作方式是每次操作String时都会创建一个新对象.这非常耗时.我知道有一个Stringbuffer类允许可变字符串,但我试图理解为什么Java建议字符串应该是不可变的?这是其他编程/脚本语言中的常见问题吗?

java string

-1
推荐指数
1
解决办法
226
查看次数