Как многие люди говорили об этом раньше, Java всегда имеет значение pass-by-value
Вот еще один пример, который поможет вам понять разницу ( классический своп пример ):
public class Test {
public static void main(String[] args) {
Integer a = new Integer(2);
Integer b = new Integer(3);
System.out.println("Before: a = " + a + ", b = " + b);
swap(a,b);
System.out.println("After: a = " + a + ", b = " + b);
}
public static swap(Integer iA, Integer iB) {
Integer tmp = iA;
iA = iB;
iB = tmp;
}
}
Печать:
До: a = 2, b = 3 После: a = 2, b = 3
blockquote>Это происходит потому, что iA и iB являются новыми локальными ссылочными переменными, которые имеют одинаковое значение переданных ссылок (они указывают на a и b соответственно). Таким образом, попытка изменить ссылки iA или iB будет меняться только в локальной области, а не за пределами этого метода.
Вы создали интересный пример, но вы не тестируете модель, которая фактически анализирует ситуацию, которую вы описываете как квазиделение. Когда вы говорите: «когда x1 = 1 и x2 = 1 (obs 3), данные всегда терпят неудачу». Вы подразумеваете необходимость использования термина взаимодействия в модели. Обратите внимание, что это приводит к «более интересному» результату:
> summary(glm(cbind(fail,nofail)~x1*x2,data=data,family=binomial))
Call:
glm(formula = cbind(fail, nofail) ~ x1 * x2, family = binomial,
data = data)
Deviance Residuals:
[1] 0 0 0 0
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -1.367e-17 1.414e-01 0.000 1
x1 2.675e-17 2.000e-01 0.000 1
x2 2.965e-17 2.000e-01 0.000 1
x1:x2 2.731e+01 5.169e+04 0.001 1
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 1.2429e+02 on 3 degrees of freedom
Residual deviance: 2.7538e-10 on 0 degrees of freedom
AIC: 25.257
Number of Fisher Scoring iterations: 22
Обычно, как правило, нужно очень подозревать бета-коэффициенты 2.731e + 01: коэффициент неявных коэффициентов i:
> exp(2.731e+01)
[1] 725407933166
В этой рабочей среде действительно нет существенной разницы между Inf и 725,407,933,166.