Como usar o BigInteger?

Eu tenho este pedaço de código, que não está funcionando:

BigInteger sum = BigInteger.valueOf(0); for(int i = 2; i < 5000; i++) { if (isPrim(i)) { sum.add(BigInteger.valueOf(i)); } } 

A variável sum é sempre 0. O que estou fazendo errado?

BigInteger é imutável. O javadocs declara que add () “[r] retorna um BigInteger cujo valor é (this + val)”. Portanto, você não pode alterar a sum , você precisa reatribuir o resultado do método add para sum variável.

 sum = sum.add(BigInteger.valueOf(i)); 
 sum = sum.add(BigInteger.valueOf(i)) 

A class BigInteger é imutável, portanto você não pode mudar seu estado. Então, chamar “add” cria um novo BigInteger , em vez de modificar o atual.

Outras respostas acertaram; O BigInteger é imutável. Aqui está a pequena alteração para fazer esse código funcionar.

 BigInteger sum = BigInteger.valueOf(0); for(int i = 2; i < 5000; i++) { if (isPrim(i)) { sum = sum.add(BigInteger.valueOf(i)); } } 

java.math.BigInteger é uma class imutável, portanto, não podemos atribuir um novo object ao local do object já atribuído. Mas você pode criar um novo object para atribuir um novo valor como:

 sum = sum.add(BigInteger.valueOf(i)); 

BigInteger é uma class imutável. Portanto, sempre que você fizer alguma aritmética, terá que reatribuir a saída a uma variável.

Sim é imutável

 sum.add(BigInteger.valueOf(i)); 

Portanto, o método add () da class BigInteger não adiciona um novo valor BigIntger ao seu próprio valor, mas cria e retorna uma nova referência BigInteger sem alterar o BigInteger atual e é isso mesmo, mesmo no caso de Strings

Biginteger é uma class imutável. Você precisa atribuir explicitamente o valor de sua saída para sumr assim:

 sum = sum.add(BigInteger.valueof(i)); 

Na verdade você pode usar

 BigInteger sum= new BigInteger("12345"); 

para criar object para BigInteger class.Mas o problema aqui é, você não pode dar uma variável nas aspas duplas.Então, temos que usar o método valueOf () e temos que armazenar a resposta nessa sum novamente.Então vamos escrever,

 sum= sum.add(BigInteger.valueOf(i)); 

Como você está sumndo alguns valores int juntos, não há necessidade de usar BigInteger. long é suficiente para isso. int é 32 bits, enquanto long é 64 bits, que pode conter a sum de todos os valores int.