Hỏi về hàm Swap 2 biến nguyên trong Java

Joe

Thành viên VIP
21/1/13
2,969
1,311
113
Khang & JackV
I am a fomer SUN senior Network developer...What do you mean ?
kỹ sư của sun lại bỏ con trỏ ko cho thao tác kiểu con trỏ vào vùng nhớ.
 

Nancru

CongDongJava Project Leader
Staff member
9/10/11
1,642
309
83
Hi Joe
I think he might say the pointer is covered all up by Sun's developers. So it can't help when doing some action like swap primitive values between 2 variables.

And long time no talk, our holiday is ending now, will go to work tomorrow. :(
 
  • Like
Reactions: khangphamngoc90

Joe

Thành viên VIP
21/1/13
2,969
1,311
113
Hi Nancru,
I hope you've a very good new year. The year of the Snake.
I'll tell you the main reason why SUN developers intentionally discarded the pointer * or &. The most danger of a SYSTEM CRASH (here: the JVM) is the misuse of pointers. Variable can be access via its address (or pointer). Example:
int *a; // an integer at the address a
int b; // an integer b, of unknown address.
Now, if you code a = &b; it's syntactically and logically correct. You can modify b via *a. But if you give a = b you'll modify a location you don't know and that could cause a System Crash or might destroy an unknown object of other running tasks (e.g. printer task, SQL management task, etc.). If so, it could be very hard to know who killed the system =))
 
  • Like
Reactions: khangphamngoc90

khangphamngoc90

Algorithms Master
Staff member
2/4/11
382
145
43
Vậy là các kỹ sư của sun đã bỏ đi một phát minh quan trọng và tạo ra một thứ không bằng thứ đã có ư :-/
:) java ra đời nhằm lược bỏ những cấu trúc rườm rà khó quản lí từ C++ nên ko thể nói nó ko bằng C++ mà nó đơn giản hơn C++
 

khangphamngoc90

Algorithms Master
Staff member
2/4/11
382
145
43
Hi Nancru,
I hope you've a very good new year. The year of the Snake.
I'll tell you the main reason why SUN developers intentionally discarded the pointer * or &. The most danger of a SYSTEM CRASH (here: the JVM) is the misuse of pointers. Variable can be access via its address (or pointer). Example:
int *a; // an integer at the address a
int b; // an integer b, of unknown address.
Now, if you code a = &b; it's syntactically and logically correct. You can modify b via *a. But if you give a = b you'll modify a location you don't know and that could cause a System Crash or might destroy an unknown object of other running tasks (e.g. printer task, SQL management task, etc.). If so, it could be very hard to know who killed the system =))
Hi Joe!
Your example is basic of C/C++, the meaning of this topic is how to change value of primitive variable like C/C++ pointers :)
My idea with java : "primitive var-->pass by value, object --> pass by reference"
 

khangphamngoc90

Algorithms Master
Staff member
2/4/11
382
145
43
Hi Nancru!
Đoạn này có nghĩa gì?
Code:
[COLOR=#003366]The language derives much of its syntax from C and C++, but it has fewer low-level facilities than either of them.[/COLOR]
Chính tính chặt chẽ và đơn giản trong cấu trúc code nên Java lớn mạnh và phát triển ngoài sức tưởng tượng của những nhà phát triển!:)
 

JackV

Administrator
Staff member
Hi Nancru!
Đoạn này có nghĩa gì?
Code:
[COLOR=#003366]The language derives much of its syntax from C and C++, but it has fewer low-level facilities than either of them.[/COLOR]
Chính tính chặt chẽ và đơn giản trong cấu trúc code nên Java lớn mạnh và phát triển ngoài sức tưởng tượng của những nhà phát triển!:)
Thì nó có nghĩa là không chỉ là đơn giản mà còn là tính chặt chẽ nữa, tiếng việt mà cũng đố nhau :P
 

khangphamngoc90

Algorithms Master
Staff member
2/4/11
382
145
43
Nói hơi xa với chủ đề, mình chỉ có 1 vài tiêu chí để đánh giá 1 ngôn ngữ nào đó so với ngôn ngữ khác (Không ngồi phỏng đoán vì mình ghét nói mà phỏng đoán)
1. Thời gian để tiếp cận với ngôn ngữ mất bao lâu?
2. Cùng 1 ứng dụng, 1 giải thuật thì ngôn ngữ nào code ngắn hơn?
3. Thời gian deploy nào nhanh hơn?
4. Thời gian debug của cái nào nhanh hơn,tốn ít công sức hơn?
Còn nữa là khi xem xét yêu cầu thực tế của ứng dụng --> Ngôn ngữ nào giải quyết tốt hơn , ví dụ để viết hệ điều hành ta có dùng java không? hoặc ứng dụng web, mail ta có dùng C++ không?
Cho nên chúng ta tuyệt đối ko nên so sánh cái nào "Tốt hơn" cái nào nhé! :)
 

JackV

Administrator
Staff member
...
Cho nên chúng ta tuyệt đối ko nên so sánh cái nào "Tốt hơn" cái nào nhé! :)
Hì vậy tốt rồi, chỉ tại bạn nói là khó khăn lắm người ta mới tìm ra nhưng bị dev của sun bỏ đi.

Lạc đề rồi! Trở về với vấn đề chính, nếu nó chưa được giải quyết là làm thế nào để swap giá trị hai biến int nhé.
 

khangphamngoc90

Algorithms Master
Staff member
2/4/11
382
145
43
Hì vậy tốt rồi, chỉ tại bạn nói là khó khăn lắm người ta mới tìm ra nhưng bị dev của sun bỏ đi.

Lạc đề rồi! Trở về với vấn đề chính, nếu nó chưa được giải quyết là làm thế nào để swap giá trị hai biến int nhé.
=)) đoạn hài hước để mọi người khỏi thắc mắc cái & * nhuw trong C/C++ nó chạy đâu mất í mà bác :P
 

Joe

Thành viên VIP
21/1/13
2,969
1,311
113
Hi Khang, hello Nancru, bonjour JackV,

No offense means, the whole discussion about C/C++ or Java is similar to the old days COBOL or FORTRAN done by the "ignorant". Let me provoke you all: Is English better than Vietnamese or Chinese? No better but also not worse than Vietnamese. Right?And so far I know that Vietnamese consists of more than 40% Chinese original words. Is Chinese better than Vietnamese?
It's the question of a way to solve your problem. In the US you need English. In Vietnam you have to speak Vietnamese. Problem solved!
The principle of Computer Science is to solve a living problem with logics and mathematics . As I started to write my second posting (Java Tuning) for CondongJava I discussed briefly about the Problem-Oriented Programming Language (POPL). Java or C is NOT the question of goodness or badness, but a question of what you can do with it. The discussed topic "SWAP" is polemic because it is an emotional belief without considering about the basics and the understanding of the matter.
The basics: Why C become C++? Because C was/is a 3rd generation programming language and belongs to a static language -meaning inflexible and atomized: A car = BMW, AUDI, MERCEDES. In C a BMW was atomized and became unrecognizable. If an AUDI is needed a car would be re-atomized, etc. That's a matter of fact that a car is a BMW or an AUDI or a TOYOTA...
The matter: In the 1990+ people were aware about the above mentioned problems to describe and to solve such global objects (car) so that OOP (Object Oriented Programming) became more and more popular. C++ emerged from C and still carried ALL old C-burdens so that it was not as popular as Java which also emerged from C BUT without any old burden. C++ requires you, for example, a Constructor and a De-constructor otherwise C++ may cause bad behavior (e.g Memory leak).

Secondly, the SWAP example tells me that some people don't understand Java even though they use it daily. Passing by values or by references is not defined by a language, but by YOUR KNOWLEDGE. If you understand computer science and the principles of OOP and POPL you always know how to pass a value or a reference -regardless of what POPL you use. If you pass an array you always pass a reference. Why it's not possible to pass a reference on a primitive variable?

I'm willing to discuss with all of you deeper into details if you want. Problem is that I don't know how good and how deep is your Computer Science knowledge is.
Joe
 

yuma2001

New Member
24/9/20
1
0
1
Viet Nam
Mình thêm cái ý kiến cùi bắp vào thôi ^^!. Đơn giản là mình dùng biến static cho gọn lẹ. ^^!. Nếu bạn làm cách khác thì phải Set_Get. Chỉ cần nhớ là muốn thay đổi biến không là static của một đối tượng thì phải thông qua phương thức Set_Get
PHP:
public class Swap {
    static int a;
    static int b;

    public static void main(String[] args) {
        a = 7;
        b = 10;
        S_Wap(a,b);
        System.out.println("Gia Tri Cua a = " + a +" b = " + b) ;

    }

    private static void S_Wap(int x, int y){
        int tem = a;
        a = b;
        b = tem;
    }
}

Kết quả : Gia Tri Cua a = 10 b = 7
Bạn ơi 2 biến a và b là tham trị nên nó sẽ tạo bản sao trong khi thực hiện hàm, bạn có swap thì nó cx ko hoán đổi 2 giá trị đc đâu
 

Joe

Thành viên VIP
21/1/13
2,969
1,311
113
Hi Nancru,
you're always welcome:).