小编raw*_*ata的帖子

为什么在junit中assertEquals和assertSame为两个实例同一个类返回相同的结果?

根据文件

assertEquals()断言两个对象是相等的.

assertSame()断言两个对象引用同一个对象.

所以我期待如果我有一个类似下面的课程

class SomeClass {}
Run Code Online (Sandbox Code Playgroud)

然后

SomeClass someClass1= new SomeClass();
SomeClass someClass2= new SomeClass();
assertSame(someClass1,someClass2); // fail
assertEquals(someClass1,someClass2); // fail
Run Code Online (Sandbox Code Playgroud)

assertEquals应该传递,assertSame应该失败,因为两个类的值相等但它们具有不同的引用位置.

由于我在两种情况下都失败了,那么我的问题是这两者之间有什么区别?

java junit assert equals

18
推荐指数
3
解决办法
4万
查看次数

javascript正则表达式匹配多行

我的多个字符串如下所示

###
some content
that I need to match
and might have some special character in it such as | <> []
###
Run Code Online (Sandbox Code Playgroud)

我试图得到哈希之间的内容.我试过下面的正则表达式,但它不匹配它并返回null.

var regex = /### ((.|\n)*) ###/;
var match= regex.exec(aboveContentAsString);
console.log(match[1]);
Run Code Online (Sandbox Code Playgroud)

javascript regex multiple-matches

4
推荐指数
1
解决办法
5919
查看次数

在java中获取二进制搜索树的根

我在java中创建了一个二进制搜索树,允许用户将节点添加到树中

这是我在java中的二叉树的实现,它在创建时接受根节点,然后自动确定它应该将子节点添加到树的左侧或右侧.

public class BinarySearchTree {

    Node root = null;
    public BinarySearchTree(Node root){
        this.root =root;
    }
    public void add(int data){
        Node newNode = new Node(data);
        if(this.root ==null){
            newNode =this.root;
        }
        if(data>this.root.data){
            addRight(root,newNode);
        }

        if(data<this.root.data){
            addLeft(root,newNode);
        }
    }

    public Node getRoot(){
       return  this.root;
    }

    private void addLeft(Node root, Node newNode) {
        if(root.leftChild == null){
            root.leftChild = newNode;
        }
        else {
            this.root = this.root.leftChild;
            add(newNode.data);
        }
    }

    private void addRight(Node root,Node newNode) {
        if (root.rightChild == null){
            root.rightChild = newNode;
        }
        else …
Run Code Online (Sandbox Code Playgroud)

java binary-tree nodes binary-search-tree

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

String线程安全吗?

字符串是不可变的,这意味着一旦您修改该值,它就会创建一个新的引用并保留先前的引用值不变。

但是,当有人争论时我不明白:

字符串是线程安全的,因为它们是不可变的

考虑下面的代码:

private String str = "1";
ExecutorService executorService = Executors.newFixedThreadPool(10);
IntStream.range(0, 1000).forEach((i)-> executorService.submit(()-> {
    str = str +"1";
}));

executorService.awaitTermination(10, TimeUnit.SECONDS);

System.out.println(str.length());
Run Code Online (Sandbox Code Playgroud)

如果它是线程安全的,那么它应该打印,1001而它总是打印小于预期值。

我知道上面的代码将创建1001不可变的引用,每个引用本身都是线程安全的,但作为开发人员,仍然不能使用不可变的东西并期望它们end-result是线程安全的。

恕我直言,不变性不能保证线程安全。

有人可以向我解释一下字符串如何保证线程安全吗?

更新:

感谢您的回答,我知道每个字符串都可以是线程安全的,但我的观点是,当您在其他方法中使用它们时,线程安全性和不变性之间没有直接关系。

例如,不可变对象可以在有状态对象中使用,并以非线程安全结果结束,可变对象也可以在同步方法中使用,并以线程安全结果结束。

java multithreading thread-safety

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