标签: immutability

如何保护字符串免受黑客攻击

有人可以告诉我应该在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)

java string reflection immutability

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

字符串不可变?

有人能回答我吗?

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)

java string heap stack immutability

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

如何将对self的可变引用转换为不可变引用以用作方法的参数?

我有以下无法编译的代码:

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, …

methods reference immutability rust

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

C ++中的不可变列表

如何在cpp中创建不可变列表?列表的引用及其数据应保持不变。

我不会在vector或任何其他容器上做包装器类(我知道与本文类似的方法)。

使用constexpr或进行此操作的最佳方法是什么const pointers

c++ immutability immutablelist

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

java中如何从可变对象创建不可变对象?

如何创建不可变的星球以便名称不会改变?我很挣扎,因为我认为这是具有可变对象的不可变项目。如果我错了请纠正我。

每次我更改输出中的名称也会更改。我错过了什么吗?

我尝试将所有字段设为私有和最终(不在本例中),但我认为我缺少一些工作代码。

我知道 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)

java oop access-modifiers immutability

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

将字符串作为参数传递时正在复制什么?

在 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)

字符串发生了什么?当字符串作为参数传递时,似乎正在复制基础数据。

相关问题:当​​我们不希望我们的函数修改字符串时,出于性能原因是否仍然建议通过指针传递大字符串?

string pointers copy immutability go

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

如何使这个类完全不可变?

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)

java immutability

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

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

为什么在重新定义变量时使变量不可变并创建新条目?

在 SML 中,如果我是对的,默认情况下变量是不可变的。所以当我们尝试重新定义一个变量时

val y  = 100;
val y = 0.6;
y
Run Code Online (Sandbox Code Playgroud)

环境将有两个条目y。新条目隐藏原始条目。是不是和我们将原始条目中的值从 100 修改为 0.6 的效果一样?

  • 如果原始条目是在函数调用之外创建的,而新条目是在函数调用中创建的,那么当函数调用返回时,我们可以访问原始条目。

  • 如果两个条目都是在同一个“范围”中创建的,就像上面的例子一样,原始条目是否不可访问?

实际上,它在 SML 中与在命令式语言(如 C)中是不是一样的?在 SML 中使变量不可变并在重新定义变量时创建新条目有什么意义?

谢谢。

sml immutability

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

Scala - 为什么::不更改List?

我刚刚写了这段代码以获得一些乐趣,我有一个问题,为什么它没有成功?

  val list = List[Int]()

  while (list.length < 20) {  
    Random.nextInt(100) :: list
  }

  println(list)
}
Run Code Online (Sandbox Code Playgroud)

似乎没有任何内容写入列表,但为什么会这样呢?我必须让它变得可变吗?为什么这里的::操作员工作不正常?

scala list immutability

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