Java මේක පැහැදිලි කරන්න

MihiCherub

Well-known member
  • Sep 14, 2009
    18,937
    1
    9,739
    113
    Gampaha
    Java මේක පැහැදිලි කරන්න

    මේක පැහැදිලි කරන්න..
    Code:
    import java.util.Arrays;
    import java.util.List;
    
    /**
     *
     * @author Tharindu
     */
    public class ContentTest {
    
        private List<String[]> content;
    
        public void setContent(List<String[]> content) {
            this.content = content;
        }
        
        public void print(){
            System.out.println("Before");
            for(String values[] : content){
                System.out.println(Arrays.asList(values));
                values[0] = "";
            }
            System.out.println("After");
            for(String values[] : content){
                System.out.println(Arrays.asList(values));
            }
        }
    }
    Code:
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.List;
    
    /**
     *
     * @author Tharindu
     */
    public class Run {
    
        public static void main(String[] args) {
            List<String[]> list = new ArrayList<>();
            list.add(new String[]{"A", "B", "C"});
    
            ContentTest contentTest = new ContentTest();
            contentTest.setContent(list);
            contentTest.print();
    
            System.out.println("Original List");
            for (String values[] : list) {
                System.out.println(Arrays.asList(values));
            }
        }
    }
    Output
    PHP:
    run:
    Before
    [A, B, C]
    After
    [, B, C]
    Original List
    [, B, C]
    BUILD SUCCESSFUL (total time: 2 seconds)

    ඇයි මේකෙ "A" කියන එක ප්‍රින්ට් වෙන්නෙ නැත්තෙ. මම ඔරිජිනල් ලිස්ට් එකට මුකුත් කරන්නෙ නෑනෙ. ඒත් ඒක කොහොමද වෙනස් වෙන්නෙ. loop එක ඇතුලෙදි අල්ල ගන්න වේරියබල් එකේ value එක වෙනස් කලාම කොහොමද ඔරිජිනල් ලිස්ට් එකේ values වෙනස් වෙන්නෙ.

    මේ විදියට යැව්වත් වෙනස් වෙනව.
    Code:
    contentTest.setContent(Collections.unmodifiableList(list));


    මෙහෙම අලුත්ම ලිස්ට් එකක් ක්ලෝන් කරල ඒක යැවුවහමත් ඔරිජිනල් ලිස්ට් එකේ values වෙනස් වෙනවනෙ.
    Code:
    contentTest.setContent(new ArrayList<>(list));

    Update 01
    ඔරිජිනල් ලිස්ට් එකට වෙනස් නොවී පාස් කරන්න ක්‍රමයක් කියන්න.
     
    Last edited:

    Challenger SRT8

    Well-known member
  • Dec 2, 2013
    9,151
    5,388
    113
    404
    ai ban first item eka empty string ekak set karala thiyenne.
    java reference pass wenne.
    method athule wenas kaloth wenas wenawa
     

    thilihare

    Well-known member
  • Apr 30, 2013
    6,685
    742
    113
    Kandy
    System.out.println("Before"); Ekedi oya Array Eke 0 index ekata Empty value ekak Assign karanawa Eka Nisaii after Ekedi (A wenuwata "",B,C ) print Wenne;
     

    MihiCherub

    Well-known member
  • Sep 14, 2009
    18,937
    1
    9,739
    113
    Gampaha
    • Like
    Reactions: dwpsg

    CoolMan88

    Well-known member
  • Dec 27, 2012
    6,734
    2,778
    113
    9foHU5k.png


    oke umba list kiyala hadana reference eka hedenne memory eke heap eke. eth aththatama object eka hedenne stack eke. umba ContentTest class ekata pass karaddi eke this.content ekenuth reference ekak hedenne ara stack eke thibuna kalin object ekatamai. eka nisa ekata karana onama change ekak main method eke list reference eken access karath ekedith e change eka affect wenawa.

    umbata original list eka wenas wenna ona nethnam ContentTest ekata pass karaddi aluth list eke duplicate ekak gahala pass karapan.

    mama hithanawa pehedili athi kiyala
     

    MihiCherub

    Well-known member
  • Sep 14, 2009
    18,937
    1
    9,739
    113
    Gampaha
    9foHU5k.png


    oke umba list kiyala hadana reference eka hedenne memory eke heap eke. eth aththatama object eka hedenne stack eke. umba ContentTest class ekata pass karaddi eke this.content ekenuth reference ekak hedenne ara stack eke thibuna kalin object ekatamai. eka nisa ekata karana onama change ekak main method eke list reference eken access karath ekedith e change eka affect wenawa.

    umbata original list eka wenas wenna ona nethnam ContentTest ekata pass karaddi aluth list eke duplicate ekak gahala pass karapan.

    mama hithanawa pehedili athi kiyala
    පැහැදිලි ඩුප්ලිකේට් කලත් වෙනසක් නෑ. ඒත් ඒ කෙලියම වෙනව.

    Code:
    ArrayList<String[]> arrayList = new ArrayList<>(list);
    contentTest.setContent(arrayList );

    Output
    PHP:
    run:
    Before
    [A, B, C]
    After
    [, B, C]
    Original List
    [, B, C]
    BUILD SUCCESSFUL (total time: 2 seconds)
     

    NO_MeRcY

    Well-known member
  • Jun 14, 2010
    5,423
    449
    83
    Singapore
    original list ekata effect novi pass karanne kohomada? contentTest class eka wenas karanna ba. main class eka witharai.

    Java basics

    ජාවා වල pass by reference කියල එකක් නැහැ. ඒ කියන්නෙ හැම වෙලාවෙම pass වෙන්නෙ copy එකක්. Reference variable types වල pass වෙන්නෙ pointer/object reference එකේ copy එකක්. ඒත් ඒ pointer එක හැම වෙලාවෙම connect වෙලා තියෙන්නෙ original object එකත් එක්ක. ඒක නිසා method එකක් ඇතුලෙ වෙනස් කමක් කලොත් original object එකම වෙනස් වෙනවා. primitive data types වල මේක වෙන්නෙ නැහැ.

    When it comes to arrays, array are nothing but Objects. Same story.

    පහත උදාහරන බලන්න

    මෙහෙම කලොත් Original එක වෙනස් වෙන්නෙ නැහැ

    Code:
    public class ContentTest {
    	private List<String[]> content;
    
    	public void setContent(List<String[]> content) {
    		this.content = content;
    	} 
    	
    
    	public void print() {
    		System.out.println("Before");
    		for (String values[] : content) {
    			System.out.println(Arrays.asList(values)); 
    		}
    		
    		List<String[]> list = new ArrayList<>();
    		list.add(new String[] { "", "B", "C" });
    		
    		content = list;
    		
    		System.out.println("After content");
    		for (String values[] : content) {
    			System.out.println(Arrays.asList(values));
    		}
    		
    		System.out.println("After list");
    		for (String values[] : list) {
    			System.out.println(Arrays.asList(values));
    		}
    	}
    
    	public static void main(String[] args) {
    		List<String[]> list = new ArrayList<>();
    		list.add(new String[] { "A", "B", "C" });
    
    		ContentTest contentTest = new ContentTest();
    		contentTest.setContent(list);
    		contentTest.print();
    
    		System.out.println("Original List");
    		for (String values[] : list) {
    			System.out.println(Arrays.asList(values));
    		}
    	}
    }

    Primitive types
    Original එක වෙනස් වෙන්නෙ නැහැ
    Code:
    public class ContentTest {
    	private int content;
    
    	public void setContent(int content) {
    		this.content = content;
    	}
    
    	public void print() {
    		System.out.println("Before"); 
    		System.out.println(content); 
    		content = 9; 
    		System.out.println("After"); 
    		System.out.println(content); 
    	}
    
    	public static void main(String[] args) { 
    		int k = 5;
    		ContentTest contentTest = new ContentTest();
    		contentTest.setContent(k);
    		contentTest.print();
    		System.out.println("Original"); 
    		System.out.println(k); 
    	}
    }

    Reference Types
    Original එක වෙනස් වෙනව

    Code:
    public class ContentTest {
    	public static void changeMe(Animal animal) {
    		 animal.setAge(10);
    		 System.out.println("After :"+animal.getAge());
    	}
    
    	public static void main(String[] args) { 
    		 Animal cat = new Animal();
    		 cat.setAge(5);
    		 System.out.println("Before :"+cat.getAge());
    		 changeMe(cat);
    		 System.out.println("Original :"+cat.getAge());
    	}
    }
    
    class Animal{
    	
    	private int age;
    
    	public int getAge() {
    		return age;
    	}
    
    	public void setAge(int age) {
    		this.age = age;
    	}  
    }
     

    MihiCherub

    Well-known member
  • Sep 14, 2009
    18,937
    1
    9,739
    113
    Gampaha
    Java basics

    ජාවා වල pass by reference කියල එකක් නැහැ. ඒ කියන්නෙ හැම වෙලාවෙම pass වෙන්නෙ copy එකක්. Reference variable types වල pass වෙන්නෙ pointer/object reference එකේ copy එකක්. ඒත් ඒ pointer එක හැම වෙලාවෙම connect වෙලා තියෙන්නෙ original object එකත් එක්ක. ඒක නිසා method එකක් ඇතුලෙ වෙනස් කමක් කලොත් original object එකම වෙනස් වෙනවා. primitive data types වල මේක වෙන්නෙ නැහැ.

    When it comes to arrays, array are nothing but Objects. Same story.

    පහත උදාහරන බලන්න

    මෙහෙම කලොත් Original එක වෙනස් වෙන්නෙ නැහැ

    Code:
    public class ContentTest {
        private List<String[]> content;
    
        public void setContent(List<String[]> content) {
            this.content = content;
        } 
        
    
        public void print() {
            System.out.println("Before");
            for (String values[] : content) {
                System.out.println(Arrays.asList(values)); 
            }
            
            List<String[]> list = new ArrayList<>();
            list.add(new String[] { "", "B", "C" });
            
            content = list;
            
            System.out.println("After content");
            for (String values[] : content) {
                System.out.println(Arrays.asList(values));
            }
            
            System.out.println("After list");
            for (String values[] : list) {
                System.out.println(Arrays.asList(values));
            }
        }
    
        public static void main(String[] args) {
            List<String[]> list = new ArrayList<>();
            list.add(new String[] { "A", "B", "C" });
    
            ContentTest contentTest = new ContentTest();
            contentTest.setContent(list);
            contentTest.print();
    
            System.out.println("Original List");
            for (String values[] : list) {
                System.out.println(Arrays.asList(values));
            }
        }
    }
    Primitive types
    Original එක වෙනස් වෙන්නෙ නැහැ
    Code:
    public class ContentTest {
        private int content;
    
        public void setContent(int content) {
            this.content = content;
        }
    
        public void print() {
            System.out.println("Before"); 
            System.out.println(content); 
            content = 9; 
            System.out.println("After"); 
            System.out.println(content); 
        }
    
        public static void main(String[] args) { 
            int k = 5;
            ContentTest contentTest = new ContentTest();
            contentTest.setContent(k);
            contentTest.print();
            System.out.println("Original"); 
            System.out.println(k); 
        }
    }
    Reference Types
    Original එක වෙනස් වෙනව

    Code:
    public class ContentTest {
        public static void changeMe(Animal animal) {
             animal.setAge(10);
             System.out.println("After :"+animal.getAge());
        }
    
        public static void main(String[] args) { 
             Animal cat = new Animal();
             cat.setAge(5);
             System.out.println("Before :"+cat.getAge());
             changeMe(cat);
             System.out.println("Original :"+cat.getAge());
        }
    }
    
    class Animal{
        
        private int age;
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }  
    }
    replay එකට තෑන්ක්ස්. ඒත් ContentTest class එක වෙනස් කරන්න බෑ. එහෙම කලොත් ඒක වෙන ප්‍රශ්න ගොඩක් හදනව. මට මේන් එකේ පාස් වෙන තැනින් විතරයි වෙනසක් කරන්න පුලුවන්.
     

    CoolMan88

    Well-known member
  • Dec 27, 2012
    6,734
    2,778
    113
    පැහැදිලි ඩුප්ලිකේට් කලත් වෙනසක් නෑ. ඒත් ඒ කෙලියම වෙනව.

    Code:
    ArrayList<String[]> arrayList = new ArrayList<>(list);
    contentTest.setContent(arrayList );

    Output
    PHP:
    run:
    Before
    [A, B, C]
    After
    [, B, C]
    Original List
    [, B, C]
    BUILD SUCCESSFUL (total time: 2 seconds)

    meka duplicate kirillak newei ban. methanadi wenneth ekama object ekakata reference eka hedena eka. duplicate karanawa kiwwa aluth list ekak hadala ekata elements tika apahu add karapan,
     

    MihiCherub

    Well-known member
  • Sep 14, 2009
    18,937
    1
    9,739
    113
    Gampaha
    Java basics

    ජාවා වල pass by reference කියල එකක් නැහැ. ඒ කියන්නෙ හැම වෙලාවෙම pass වෙන්නෙ copy එකක්. Reference variable types වල pass වෙන්නෙ pointer/object reference එකේ copy එකක්. ඒත් ඒ pointer එක හැම වෙලාවෙම connect වෙලා තියෙන්නෙ original object එකත් එක්ක. ඒක නිසා method එකක් ඇතුලෙ වෙනස් කමක් කලොත් original object එකම වෙනස් වෙනවා. primitive data types වල මේක වෙන්නෙ නැහැ.

    When it comes to arrays, array are nothing but Objects. Same story.

    පහත උදාහරන බලන්න

    මෙහෙම කලොත් Original එක වෙනස් වෙන්නෙ නැහැ

    Code:
    public class ContentTest {
        private List<String[]> content;
    
        public void setContent(List<String[]> content) {
            this.content = content;
        } 
        
    
        public void print() {
            System.out.println("Before");
            for (String values[] : content) {
                System.out.println(Arrays.asList(values)); 
            }
            
            List<String[]> list = new ArrayList<>();
            list.add(new String[] { "", "B", "C" });
            
            content = list;
            
            System.out.println("After content");
            for (String values[] : content) {
                System.out.println(Arrays.asList(values));
            }
            
            System.out.println("After list");
            for (String values[] : list) {
                System.out.println(Arrays.asList(values));
            }
        }
    
        public static void main(String[] args) {
            List<String[]> list = new ArrayList<>();
            list.add(new String[] { "A", "B", "C" });
    
            ContentTest contentTest = new ContentTest();
            contentTest.setContent(list);
            contentTest.print();
    
            System.out.println("Original List");
            for (String values[] : list) {
                System.out.println(Arrays.asList(values));
            }
        }
    }
    මෙහෙම කලත් ඔරිජිනල් එක වෙනස් වෙනව. :sorry:
     

    MihiCherub

    Well-known member
  • Sep 14, 2009
    18,937
    1
    9,739
    113
    Gampaha
    meka duplicate kirillak newei ban. methanadi wenneth ekama object ekakata reference eka hedena eka. duplicate karanawa kiwwa aluth list ekak hadala ekata elements tika apahu add karapan,
    Code:
            ArrayList<String[]> arrayList = new ArrayList<>();
            for (String value[] : list) {
                arrayList.add(value);
            }
            contentTest.setContent(arrayList);
    Hariyanne na
    PHP:
    run:
    Before
    [A, B, C]
    After
    [, B, C]
    Original List
    [, B, C]
    BUILD SUCCESSFUL (total time: 1 second)
     

    Nimesh_LK

    Member
    Sep 7, 2015
    2,117
    129
    0
    27
    ලංකාවේ

    java ඉගෙනගන්න A/L pass වෙන්න ඔනද?
    java වලින් මොනවද කරන්න පුලුවන්?
    website හදන්නෙ ඔකෙන්ද?