相关疑难解决方法(0)

不可变的java对象

今天在我阅读有关BigDecimal类的一些文档时,我偶然发现了一个基本属性,BigDecimal类是不可变的.

我怎么能向祖母解释不变性概念?

班级不变性的利弊是什么?

扩展类可以变得可变吗?

考虑到我想用我的类扩展BigDecimal:

`MyBigDecimal extends BigDecimal` 
Run Code Online (Sandbox Code Playgroud)

扩展是否违反了面向对象的基本设计原则?

java design-patterns bigdecimal

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

为什么对象可以更改类变量的值?

根据Oracle的定义,

有时,您希望拥有所有对象共有的变量.这是通过静态修改器完成的.在声明中具有static修饰符的字段称为静态字段或类变量.它们与类相关联,而不是与任何对象相关联.该类的每个实例共享一个类变量,该变量位于内存中的一个固定位置.

通过这个定义,可以安全地推断出一个静态变量属于该类,并且不应该被类的任何对象访问以进行修改.因为所有对象都共享它.

所以来自同一定义的这一行有点令人困惑:

任何对象都可以改变类变量的值......

所以我尝试了这个代码并打印出45(尽管我收到警告说"通过实例引用访问静态成员"):

public class Main {

static int value = 8;

public static void main(String[] args) {
// write your code here

    Main main = new Main();

    main.value = 45;

    System.out.println(value);
  }
}
Run Code Online (Sandbox Code Playgroud)

如果这是一个Student类,并且我有一个静态变量numberOfStudents,为什么要允许该类的一个对象更改此类变量的值?

java

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

BigInteger.ValueOf()返回缓存的对象?

我写了一个测试代码来检查相等性.我检查过Java doc,它说BigInteger是不可变的.检查静态工厂方法的文档,valueOf它看起来像返回已经缓存的不可变实例.那么为什么==在缓存的实例时返回false.

以下是适用valueOf于的Java文档BigInteger:

返回一个Big Integer,其值等于指定long的值.这种"静态工厂方法"优先于(长)构造函数提供,因为它允许重用常用的BigIntegers.

下面的代码将进入无限循环.

public static void main(String[] args) {
    while(true) {
        BigInteger a = BigInteger.valueOf(100);
        BigInteger c = BigInteger.valueOf(100);
        if (a == c) {
            break;
        }
 }
Run Code Online (Sandbox Code Playgroud)

java numbers biginteger

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

如何在java.io.File对象中更改文件路径位置

问题说明了一切。我有一个指向的File对象/home/user/filename1

如果我调用file.getAbsolutePath(),它将返回 /home/user/filename1

我的问题是-

  1. 我们可以将文件对象内部的路径更改为其他位置吗?
  2. 如果是,那怎么办?

谢谢

java file-io

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

什么使String不可变?

我知道字符串是不可变的,但为什么呢?

哪个概念使字符串类不可变?

public class Mainclass
{
    public static void main(String[] args) 
    {
        String s = "Example";
        s.toUpperCase();
        System.out.println(s);
    }
}
Run Code Online (Sandbox Code Playgroud)

结果:

Example
Run Code Online (Sandbox Code Playgroud)

java string class immutability

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

java.util.List是否可变?

我们能够add/ remove元素List使用add()/ remove()方法而不创建看起来类似的另一个列表StringBuffer append().所以我认为List是可变的.谁能证实我的理解是正确的?如果有错,请用下面的代码说明

List<String> strList = new ArrayList<String>();
strList.add("abc");
strList.add("xyz"); 
Run Code Online (Sandbox Code Playgroud)

java

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

你怎么能说String是不可变的,因为你可以改变它?

因为String是不可变的我们如何更改String for Example

String s1="Hello";
  String s2="Manas";
Run Code Online (Sandbox Code Playgroud)

现在我正在制作

s1=s1+s3;
Run Code Online (Sandbox Code Playgroud)

它将打印"Hello Manas".所以String s1会改变.

那你怎么能说String是不可变的呢?

java string

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