[Java的] 在Java中排列功能 – 掉在Java中
功能交换的实现 (换 – 转变) 在java中它是从C / C 或Pascal有所不同,… 要改变变量的值了功能,你必须使用对象. 您可以参考 2 下面VD交换内容,那么,如果你想阅读下面或者如果你发现它混淆阅读代码,请阅读下面先解释细节,然后再回到代码.
VD1: 使用对象
package VietSource.net.temp; import java.util.Scanner; class Number { // lop Number int num; public Number(int num) { // ham khoi tao this.num = num; } public int getNum() { // ham tra ve gia tri num return num; } public void setNum(int num) { // ham set gia tri num this.num = num; } } public class MySwap { private void swap(Number a, Number b) { // ham hoan vi int temp = a.getNum(); // gan num cua a cho temp a.setNum(b.getNum()); // gan num cua b cho a b.setNum(temp); // gan temp cho num cua b } public static void main(String[] args) { Number a, b; // hai doi tuong Number a va b MySwap sw = new MySwap(); // doi tuong sw thuoc lop MySwap Scanner scan = new Scanner(System.in); System.out.print("Nhap a = "); a = new Number(scan.nextInt()); // khoi tao a voi num la so nhap vao System.out.print("Nhap b = "); b = new Number(scan.nextInt()); // khoi tao b voi num la so nhap vao scan.close(); System.out.println("Befor swap: a = " + a.getNum() + " b = " + b.getNum()); sw.swap(a, b); // su dung ham swap System.out.println("After swap: a = " + a.getNum() + " b = " + b.getNum()); } }
首席执行官 2 用最后一段 (物质也是对象阵列)
package VietSource.net.temp; import java.util.Scanner; public class SwapArray { private void swapArray(int arr[], int i, int j){ int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } public static void main(String[] args) { SwapArray sw = new SwapArray(); Scanner scan = new Scanner(System.in); int arr[] = new int[2]; System.out.print("Nhap a = "); arr[0] = scan.nextInt(); System.out.print("Nhap b = "); arr[1] = scan.nextInt(); System.out.println("Befor swap: a = " + arr[0] + " b = " + arr[1]); sw.swapArray(arr, 0, 1); System.out.println("After swap: a = " + arr[0] + " b = " + arr[1]); scan.close(); } }
困难之一 (与争议) 对于C 程序员Java编程的传递由值或
传递按引用. 例:
Object a = new Object("Object A"); //kỳ quặc với C++: Object* a = new ... Object b = a; b.setNewName("Object B");
根据C 对象B的开发者的理解显然更改名称无关,反对一个整体. 实际上,根据不同的Java, 对象将有一个名为“对象B”就像对象B均. 为对象B完全“独立”的对象: 对象B = a.clone();
但功能互换() 爪哇以这样的方式来操作传递按引用.
private void swap(Type arg1, Type arg2) { Type temp = arg1; arg1 = arg2; arg2 = temp; }
因此,有!!! Java的究竟? 隐藏背后的争议采用迷宫等什么?
首先,有必要理解,通过噪声值由参数值的副本在一个“可变的”函数内用于传输. 所以,当函数返回时,它会破坏复制的参数, 和传递的参数不受影响变化. 相反,它是通过按引用实际上是一个别名,以创造真正的参数. 当参数含量的变化,这也直接改变传递的参数. 故障节省CPU与一个大对象后,使C 副本, 与复制/初始化复杂.
然而,在Java中的交换功能不起作用,因为它的工作的方式传递按值. 交换后,函数返回ARG1和arg2是不转边. 但奇怪的是,如果函数体交换调用改变对象类型的方法, 例如:: arg1.setValue(“变化”);
按照这种思维方式,在退出函数swap传递按值后ARG1不会改变. 现实的情况是不同的, ARG1所谓的setValue() 所以退出函数时,ARG1的值更改. 回想一下,在C有参考的概念 (&). 但有指针Ç (指针) 这让精通C的灵活性,而无需参考. Java没有指针? 许多人认为,: 目标是通过按引用也是原语传递按值 (在Java, 对象是按引用传递, 和原语是按值传递。) 该条款只对了一半. 反对清孔班派được传递按引用马拉对象引用được传递按值. 我们将知道答案:
在Java中回答上述所有的奇数是C,它的Java是“干净”的指针语法. Java有指针,但指针声明,并用了一个很干净. 当然,它但不是在C作为强指针,但它也“修复”的所有潜在的错误的和危险的 (铸件, 释放指针干草指针运算) 在C指针的.
在Java:
对象;
像C / C
对象一*;
因此,当
对象B = A;
指在C / C
对象* B = A; // b和a顷指针
和
b.setName(“对象B”);
等于
B->的setName(“对象B”);
所以b.setName(“对象B”) 也放置的对象“点”由一个名叫“对象B”为a和b指向同一个对象.
而
private void swap(Object a, Object b) { Object temp = a; a = b; b = temp; }
对应
void swap(Object* a, Object* b) { Object* temp = a; a = b; b = temp; }
显然,在C中此功能不起作用,除非这种变化:
void swap(Object* a, Object* b) { Object temp = *a; *a = *b; *b = temp; }
“光标”A和B都通过风格传递按值 (可以理解,Java是像C, 所有的参数传递的风格传递按值) 因此函数返回后互换, B保持不变或转让A = B无厘头. 但a.setValue(”…”) 光标所指的改变的对象.
参考:
http://javadude.com/articles/passbyvalue.htm
http://java.forumvi.net/t23-topic
这个问题挺有意思. 好文章, 它会帮助你更好地理解一些光标. 在Java中,你说的是正确的部件指针. 但在更深的层次, 还有一些你可能不明白这个问题的本质. 我有几个评论让你抗议:
– 在C, C , OBJ-C干草的java, 你传送到内容, 在所有情况下, 引用或值,它是可变的刚值, 或者,副本也是. “通过按引用,它实际上创建了一个别名真正参数” 这是不对的,你先生. 这就是价值只是一个副本只. 你永远不会改变的传入的参数值.
– 通过按值意味着你通过在短短的参数 1 不变, 你不能改变什么.
– 传递按引用意味着你传递一个指针参数, 该指针,从中可以改变,可以参考指针变量的值. 但是,你不能改变这个指针的值.
私人无效掉(键入ARG1, 键入ARG2) {
类型TEMP = ARG1;
ARG1 ARG2 =;
ARG2 =温度;
}
在本实施例, 点 # Java和C 之间是什么:
– 用java: 参数类型本质上是类型 *: 你可以改变人ARG1的值.
– 用java: 参数类型为类型: 你不能改变的家伙ARG1的值.
如果你用C 写的 :
私人无效掉(类型 * ARG1, 类型 * ARG2) {
}
如果你认为你可以改变参数的值,你有误解.
首先改变的变量类型, 您的参数传递给类型Type * 有.
真正的耻辱, 建华之前,她唯一的,不应该知道的java C 与传递按引用. 昨天晚上我第一次学习C . 我迷惑参考到obj与传递按引用. 今天上午我的阅读和理解. 必须试着去忘记这证明了另一种危险的新DC愚蠢的CMT. ^^.
感谢您访问的博客. 😀
总的来说,这是这种复杂的一小部分, 当然,你要学会和修改他们的概念. 如果有什么差错,你不妨分享.
问问自己,你为什么没有交换功能的数类,随时添加类花那么MYSWAP?
事实上,在你的类啊做的很好. 但为了方便,我写了这, 因为如果这样,它将在课堂中使用数 1 Number对象是一个CLAS, B或声明 1 其他对象调用交换.
cảm ơn Bạn, giờ mới biết một object là object reference được pass by value. trước giờ mình cứ nghĩ 1 object như một pointer.
phức tạp quá bạn có thể lấy thêm ví dụ dễ hiểu hơn nữa được không ?
phần con trỏ trong c mình cũng chưa nắm chắc nữa.