java没有引用传递?
java的函数参数只有传值,而没有传引用。
但java的变量类型里面有对象引用的概念,所以你这个是借助对象引用达到了改变字符的目的,二者是不同的。
你这个函数ss的参数是String[]类型,这是一个数组对象的引用,你当然可以通过这个对象引用去访问和修改数组本身的值,但你无法修改这个引用变量本身。也就是说你这个函数ss内尽管可以任意修改abc所指向的数组内的值,但你无法修改这个abc变量本身,比如你无法让abc指向另一个数组对象。
再简洁一点:
并不是说函数内能影响到函数外的数据就一定是引用传参,注意abc是一个“对象的引用”,你这个并没有做到改变函数外面abc的值,你实际上修改的是abc“指向的对象”,而不是修改的“abc本身” 。
——————–
你那么说也对,因为java中的String是固定不可修改的,任何对String的修改操作都会导致旧的String被丢弃而产生一个新的String替代之,这样原来的字符串引用就改变了。不过这个和你之前问的引用传参没有什么关系,关于没有引用传参的关键证据是“经过ss方法后,abc本身没有改变(abc仍然指向同一个数组),只不过是abc指向的数组的内容发生了改变”
用Java方法的参数怎么传递?
在 Java 应用程序中永远不会传递对象,而只传递对象引用。因此是按引用传递对象。Java应用程序按引用传递对象这一事实并不意味着 Java 应用程序按引用传递参数。参数可以是对象引用,而 Java 应用程序是按值传递对象引用的。
1. 对象是按引用传递的;
2. Java 应用程序有且仅有的一种参数传递机制,即按值传递;
3. 按值传递意味着当将一个参数传递给一个函数时,函数接收的是原始值的一个副本;
4. 按引用传递意味着当将一个参数传递给一个函数时,函数接收的是原始值的内存地址,而不是值的副本。
Java 应用程序中的变量可以为以下两种类型之一:引用类型或基本类型。当作为参数传递给一个方法时,处理这两种类型的方式是相同的。两种类型都是按值传递的;没有一种按引用传递。
注:参数是按值而不是按引用传递的,说明 Java 应用程序有且仅有的一种参数传递机制,即按值传递。
为什么java方法中只有值传递,没有引用传递
您好:
Java中参数的传递方式有两种:传值和传引用。按值传递(call by value)表示方法接受的是调用者提供的值;按引用调用(call by reference)表示方法接受的是调用者提供的变量地址。
传值,参数为基本类型时,是采用传值的方式,示例如下:
传引用,一般参数为对象类型,示例如下:
希望对你有帮助!
java中继承的数值传递引用
这个题目如下思路与实现
思路:
依照圆和圆柱的描述抽象成Java程序里的对象Cylinder与Circle,这也是Java的特点之一
圆与圆柱的关系:圆柱继承圆
写测试类TestCylinder
实现:
1.圆:
class Circle {
private double radius;// 半径
// 构造方法半径设为1
public Circle() {
super();
this.radius = 1.0;
}
// 设置半径
public void setRadius(Double radius) {
this.radius = radius;
}
// 得到半径
public Double getRadius() {
return radius;
}
}
2.圆柱
class Cylinder extends Circle {
private double length;
public Cylinder() {
super();
this.length = 1.0;
}
public void setLength(double length) {
this.length = length;
}
public double getLength() {
return length;
}
public double findVolume() {
return this.length * super.getRadius() * super.getRadius() * Math.PI;
}
}
3.测试
public class TestCylinder {
public static void main(String[] args) {
Cylinder cy = new Cylinder();//实例化一个圆柱
System.out.println(cy.findVolume());//因为length有默认值1,圆柱的父类圆具有半径且初始值是1,此处,没有主动给length和radius赋值,所以findVolume里使用的半径与高都是1,所以体积是3.141592653589793
cy.setRadius(2.0);
cy.setLength(2.0);
System.out.println(cy.findVolume());//主动给半径和高设置值,那么cy的半径与高的初始值就会被改变,结果就是2*2*2*PI
}
}
运行结果:
3.141592653589793
25.132741228718345