我写了以下代码:
public static void main(String[] args) {
// TODO Auto-generated method stub
String s = new String("abc");
System.out.println(s.concat("def"));
}
Run Code Online (Sandbox Code Playgroud)
它正在返回输出:"abcdef"
如果字符串是不可变的,这怎么可能.
我碰到了这段代码,有些困惑
java.lang.String s = new String("hello");
Run Code Online (Sandbox Code Playgroud)
我不确定将哪个变量s初始化为java.lang.String,以及此vs String hold =“ hello”的目的是什么。我试图浏览一些文档,但找不到任何东西。
我最近在Java中了解到:==比较对象引用,而不是内容,这就是为什么:
String str1 = "hell";
String str2 = "o";
String str3 = str1 + str2;
String str4 = "hello";
str3 == str4; // False
Run Code Online (Sandbox Code Playgroud)
到现在为止还挺好.但是,当我执行以下操作时:
String str5 = "hello";
str5 == str4; // True
Run Code Online (Sandbox Code Playgroud)
这是否意味着str5和str4引用相同的内存对象?这是如何运作的?
我试图用它的最后一个替换字符串的第一个字母/字符,并且它是第一个字符串.例如abcd => dbca.字符串在Java中是不可变的,那么我们如何解释这个程序的行为呢?请看一下最终输出.str1没有char'a',但在最终输出中它出乎意料地......怎么样?// frontBack()的参数是String"abcd".
public static void frontBack(String str) {
String first= ""+str.charAt(0);
System.out.println("first char is "+first);
String last = ""+str.charAt(str.length()-1);
System.out.println("last char is "+last);
String str1;
str1 = str.replace(""+str.charAt(0),last);
System.out.println("String str1 is => "+str1);
String str2 ;
str2 = str1.replace(""+str1.charAt(str1.length()-1),first);
System.out.println("String str2 is derived from str1(dbcd) which has no 'a' but o/p is => "+str2);
}
/* Have a look at output:
first char is a
last char is d
String str1 is => dbcd
String str2 is derived …Run Code Online (Sandbox Code Playgroud) Every time I try doing the trim method and the lowercase method it doesn't show the way I want it.
sentence.trim();
sentence.toLowerCase();
System.out.println("\"" + sentence + "\"" + " ---> ");
Run Code Online (Sandbox Code Playgroud)
For example, if I input " Hello World! ", it will print out " Hello World! " and not use any of the methods.
Java不通过引用传递变量.在这种情况下,数据结构如何ListIterator更改其相应的列表?
这是我写的一个示例迭代器:
public class OdpIterator<E> implements ListIterator<E> {
private OdpList<E> list;
private int cursor;
public OdpIterator(OdpList<E> list) {
this.list = list;
}
@Override
public void add(E arg0) {
list.add(arg0);
}
Run Code Online (Sandbox Code Playgroud)
但是当我尝试更改list时add(),它不会更改基础列表,因此以下测试失败:
OdpList<Integer> list = new OdpList<Integer>();
ListIterator<Integer> iter = list.listIterator();
iter.add(42);
assertTrue(list.contains(42));
Run Code Online (Sandbox Code Playgroud)
OdpList add:我认为它是正确的,因为它通过了它的单元测试.
@Override
public boolean add(E arg0) {
ListCell<E> cell = new ListCell<E>(arg0);
if (size() > 0) { //if something is already in the list
tail.setNext(cell);
tail = cell;
}
else { …Run Code Online (Sandbox Code Playgroud) 我知道不可变对象是无法修改的对象.但是当我们使用函数时可以修改字符串.那么我们怎么说字符串是不可变的?这是一个问题采访.需要尽快回答
这可能是最愚蠢的问题,但我知道Java中的字符串是不可变的.但是,请考虑扫描典型文件的此代码段:
try (BufferedReader br = new BufferedReader(new FileReader(file))) {
String line;
while ((line = br.readLine()) != null) {
// The value of line appears to be reset after each iteration
}
}
Run Code Online (Sandbox Code Playgroud)
为什么line这里没有保留其在扫描过程中的价值?这与readLine()方法本身有关吗?我承认我还没有看到该方法是如何实现的,所以我不确定它是如何工作的.
目前我正在尝试删除字符串数组中的破折号.我在下面尝试的代码不起作用.
splitTimeStamp[0].replaceAll("[\\s\\-()]", "");
System.out.println(splitTimeStamp[0]);
Run Code Online (Sandbox Code Playgroud)
从另一个stackoverflow页面获得replaceAll代码.
提前致谢!
只是有一个问题,我们如何重写上面的代码,以便仅创建一个String对象?
字符串是不可变的,不是studentDetails已经有一个String对象
public void displayString(Student[] students)
{
String studentDetails = "";
for (Student stu : students)
{
studentDetails += stu.getFirstName();
studentDetails += " ";
studentDetails += stu.getLastName();
studentDetails += " ";
studentDetails += stu.getAge();
studentDetails += "\n";
}
System.out.println("Student Details are: ");
System.out.println(studentDetails);
}
Run Code Online (Sandbox Code Playgroud) java ×9
string ×6
immutability ×2
android ×1
iterator ×1
lowercase ×1
methods ×1
replaceall ×1
trim ×1
variables ×1