有人可以告诉我应该在String类API中进行更改(我们不能这样做),以便下面的程序应该打印"地球"吗?或者
我们如何停止打印"太阳"?如何阻止黑客攻击?
public class StringAPI {
public static void main(String[] args) throws IllegalAccessException, NoSuchFieldException {
Field value = String.class.getDeclaredField("value");
value.setAccessible(true);
value.set("Earth", "Sun".toCharArray());
System.out.println("Earth"); // prints "Sun"
}
}
Run Code Online (Sandbox Code Playgroud) 有人能回答我吗?
public class ReplaceString{
public static void main(String arg[]) {
String a = "Hariom";
a = a.replace('H', 'b');
System.out.println(a);
}
}
Run Code Online (Sandbox Code Playgroud) 我有以下无法编译的代码:
struct A {
x: i32,
}
impl A {
fn add_assign(&mut self, other: &Self) {
self.x += other.x;
}
fn double(&mut self) {
self.add_assign(self);
}
}
Run Code Online (Sandbox Code Playgroud)
错误是:
error[E0502]: cannot borrow `*self` as mutable because it is also borrowed as immutable
--> src/lib.rs:11:9
|
11 | self.add_assign(self);
| ^^^^^----------^----^
| | | |
| | | immutable borrow occurs here
| | immutable borrow later used by call
| mutable borrow occurs here
Run Code Online (Sandbox Code Playgroud)
如何传递self
作为参数add_assign
?我已经试过&self
, …
如何在cpp中创建不可变列表?列表的引用及其数据应保持不变。
我不会在vector或任何其他容器上做包装器类(我知道与本文类似的方法)。
使用constexpr
或进行此操作的最佳方法是什么const pointers
?
如何创建不可变的星球以便名称不会改变?我很挣扎,因为我认为这是具有可变对象的不可变项目。如果我错了请纠正我。
每次我更改输出中的名称也会更改。我错过了什么吗?
我尝试将所有字段设为私有和最终(不在本例中),但我认为我缺少一些工作代码。
我知道 java.util.Date 已被弃用,但这只是示例。
import java.util.Date;
public final class Planet {
String name;
private final Date discoveryDate;
public Planet (String name, Date discoveryDate) {
this.name = name;
this.discoveryDate = new Date(discoveryDate.getTime());
}
public String getName()
return name;
}
public Date getDiscoveryDate() {
return new Date(discoveryDate.getTime());
}
public static void main(String [] args) {
Planet Earth = new Planet("Earth Planet", new Date(2020,01,16,17,28));
System.out.println("Earth");
System.out.println("------------------------------------");
System.out.println("Earth.getName: " + Earth.getName());
System.out.println("Earth.getDiscoveryDate: " + Earth.getDiscoveryDate());
}
}
Run Code Online (Sandbox Code Playgroud) 在 Golang 中,一切都是按值传递的。如果我“直接”传递一个数组(而不是通过指针传递它),那么在函数中所做的任何修改都将在函数外部找到
func f(a []int) {
a[0] = 10
}
func main() {
a := []int{2,3,4}
f(a)
fmt.Println(a)
}
Output: [10 3 4]
Run Code Online (Sandbox Code Playgroud)
这是因为,据我了解,数组(除其他外)构成了指向底层数据数组的指针。
除非我弄错了(请参阅此处),字符串还构成(与“len”对象一起)unsafe.Pointer
指向基础数据的指针(a)。因此,我期待与上面相同的行为,但显然,我错了。
func f(s string) {
s = "bar"
}
func main() {
s := "foo"
f(s)
fmt.Println(s)
}
Output: "foo"
Run Code Online (Sandbox Code Playgroud)
字符串发生了什么?当字符串作为参数传递时,似乎正在复制基础数据。
相关问题:当我们不希望我们的函数修改字符串时,出于性能原因是否仍然建议通过指针传递大字符串?
public final class Test {
private final Date date;
public Test() {
date = new Date();
}
public Test(Date date) {
this.date = date;
}
public Date getDate() {
return date;
}
public String toString() {
return "Test:[date=" + date.toString() + "]";
}
}
Run Code Online (Sandbox Code Playgroud) 我听说Haskell变量是不可变的,但我能够重新分配和更新变量值
在 SML 中,如果我是对的,默认情况下变量是不可变的。所以当我们尝试重新定义一个变量时
val y = 100;
val y = 0.6;
y
Run Code Online (Sandbox Code Playgroud)
环境将有两个条目y
。新条目隐藏原始条目。是不是和我们将原始条目中的值从 100 修改为 0.6 的效果一样?
如果原始条目是在函数调用之外创建的,而新条目是在函数调用中创建的,那么当函数调用返回时,我们可以访问原始条目。
如果两个条目都是在同一个“范围”中创建的,就像上面的例子一样,原始条目是否不可访问?
实际上,它在 SML 中与在命令式语言(如 C)中是不是一样的?在 SML 中使变量不可变并在重新定义变量时创建新条目有什么意义?
谢谢。
我刚刚写了这段代码以获得一些乐趣,我有一个问题,为什么它没有成功?
val list = List[Int]()
while (list.length < 20) {
Random.nextInt(100) :: list
}
println(list)
}
Run Code Online (Sandbox Code Playgroud)
似乎没有任何内容写入列表,但为什么会这样呢?我必须让它变得可变吗?为什么这里的::
操作员工作不正常?